2017-12-21 2 views
1

Ich habe eine Workout-Kalender-App, wo, wenn ein Benutzer zu /workoutcal geht, ich möchte, dass sie an workoutcal/<today's year>/<today's month> umgeleitet werden. Das heißt, möchte ich sie auf dieser Strecke umgeleitet werden, sollten sie gehen zu /workoutcal:Umleiten von URL mit zusätzlichen URL-Parametern

url(r'^(?P<year>[0-9]+)/(?P<month>[1-9]|1[0-2])$', views.calendar, name='calendar'), 

Wie kann ich ein neues URL-Muster in urls.py schreiben, der etwas tut, wie:

url(r'^$', RedirectView().as_view(url=reverse_lazy(),todays_year, todays_month)), 

Antwort

2

Sie können die Unterklasse , überschreiben get_redirect_url, und die URL dort umkehren.

class MonthRedirectView(RedirectView): 
    def get_redirect_url(*args, **kwargs): 
     today = timezone.now() 
     return reverse(calendar, args=[today.year, today.month]) 

sind dann Ihrer Ansicht nach in das URL-Muster:

url(r'^$', MonthRedirectView().as_view()), 
1

ich fand eine andere Lösung für mein Problem, das eine Ansicht macht, die einfach den Kalender mit den richtigen Argumenten aufruft:

der url:

url(r'^$', views.redirect_to_calendar), 

die Umleitung Ansicht:

def redirect_to_calendar(request): 
    today = timezone.now() 
    return calendar(request, year = today.year, month = today.month) 

die Ansicht, die wir für den Benutzer dienen: Dieser:

def calendar(request, year = None, month = None): 

    ## A bunch of server logic 

    return HttpResponse(template.render(context, request)) 
0

Ihre RedirectView ist die urls.py in Ihrer Anwendung Unter der Annahme:

url(r'^(?P<year>[0-9]+)/(?P<month>[1-9]|1[0-2])$', views.calendar, name='calendar'), 
url(r'^$', RedirectView().as_view(url='{}/{}'.format(todays_year, todays_month)), 

EDIT geht davon aus, dass todays_year und todays_month berechnet werden, wenn ein Benutzer zu /workoutcal/ geht, was sie nicht sind (Sie werden beim Laden der URL geladen). Siehe Alasdairs Antwort.

+2

Wenn Sie dies tun, dann 'todays_year' und' todays_month' berechnet werden, wenn die URLs geladen werden. Nächsten Monat werden Sie feststellen, dass Benutzer zu der veralteten URL weitergeleitet werden. – Alasdair

+0

Gute Beobachtung, darüber habe ich nicht nachgedacht. – Stolson