2016-12-14 1 views
0

J'ai la vue suivante que je ne veux rester dans la vue actuelle que si elle n'a pas été redirigée.Le paramètre django n'obtient aucune redirection avec le paramètre

def surveys_view(request, survey=None): 
    if survey != 'survey1': 
      return redirect('matching:surveys', survey='survey1') 

Mon urls.py ressemble à ceci:

url(r'^surveys', views.surveys_view, name='surveys'), 
url(r'^surveys/(?P<survey>survey1|survey2)', views.surveys_view, name='surveys'), 

Le problème est que la variable d'enquête est None chaque fois provoquant redirections infinies. Je pense qu'après la redirection, la valeur survey serait définie sur "survey1".

Comment puis-je définir le paramètre d'enquête sur 'survey1' au lieu de None?

+1

postez votre fichier urls.py –

+0

@sideffect J'ai ajouté mes URLs – Atma

Répondre

1

dans django urls liste est analysé de la position 0e, donc dans vos urls,

url(r'^surveys', views.surveys_view, name='surveys') 

a priorité, puisque l'expression régulière correspond comme tout uri commençant par surveys<whatever>, donc soit modifier les paramètres d'URL pour,

url(r'^surveys/$', views.surveys_view, name='survey-list'), 
url(r'^surveys/(?P<survey>survey1|survey2)', views.surveys_view, name='survey-details'), 

ou modifier l'ordre

url(r'^surveys/(?P<survey>survey1|survey2)', views.surveys_view, name='survey-detail'), 
url(r'^surveys', views.surveys_view, name='survey-list'), 

NOTE: remarquez qu'il y a aussi un changement de paramètre de nom, puisqu'il vaut mieux le définir comme une valeur unique

+0

Wow, vous connaissez vos affaires! Merci @sideeffect – Atma