2012-07-23 4 views
1

Aidez-moi plaisir de fixer urls.py Les gens ont suggéré cette façon, mais il does't travail pour moi .....regex dans Django urls.py

#urls.py 
    (r'^/user/(?P<username>)/subject/([\w|\W]+)/$', subject), 

#template 
{% for subject in subjects %} 
    <li><a href="/user/{{ user.username }}/subject/{{ subject.name }}">{{ subject.name }}</a> {{ del_form.delete }}</li> 
{% endfor %} 

#error 
PAGE NOT FOUND 
Request URL: http://127.0.0.1:8000/user/root/subject/Math%20140 
.... 
.... 
^/user/(?P<username>)/subject/([\w|\W]+)/$ 
+0

Je ne sais pas pour django, mais votre expression régulière nécessite que l'URL se termine par un '/', et votre URL de test (http: //127.0.0.1MATH%20140) ne se termine pas dans un '/'. Vous pourriez le rendre facultatif ou l'enlever. De même, '[\ w | \ W] +' devrait être '[\ w \ W] +' car '|' ne signifie rien dans le '[]'. (Pourquoi ne pas simplement faire '. +' Alors? Vous incluez de nouvelles lignes dans '[\ w \ W]' alors que '.' ne le fait pas) –

+0

Dans une certaine mesure, cela dépend aussi du fait que le drapeau multiligne (m) est fixé, ce que je ne pense pas que ce soit. Un problème secondaire pourrait être que l'URL est encodée en url, alors que le sujet ne l'est probablement pas. –

+0

Django ajoute par défaut des barres obliques de fin aux URL. Le problème d'encodage de l'url serait probablement mieux géré en ajoutant un slug sujet qui n'inclut pas les espaces etc, ou en utilisant [le filtre 'slugify'] (https://docs.djangoproject.com/fr/1.3/ref/templates/builtins/# slugify) (et en essayant d'inverser dans la vue - probablement préférable de simplement ajouter un réel ['SlugField'] (https://docs.djangoproject.com/fr/1.3/ref/models/fields/#slugfield) pour éviter les difficultés là-bas). – Dougal

Répondre

7

Vous avez une erreur dans votre régulière expression. Vous devez utiliser un constructeur regex si vous êtes nouveau à ceci:

http://ryanswanson.com/regexp/ (Perl)

http://www.pyregex.com/ (Python)

Je pense que vous voulez quelque chose comme ceci:

^user/(?P<username>.+)/subject/([\w|\W]+)/ 

Mais vous pourrait vouloir changer le '. +' en quelque chose de plus restrictif:

^user/(?P<username>[^/]+)/subject/([\w|\W]+)/ 

Notez également que vous ne voulez probablement pas cette barre oblique - en raison de la manière dont Django envoie l'URL initiale au répartiteur d'URL.

+0

Merci beaucoup !!!!! Thant est exactement ce dont j'ai besoin! – Vor

+0

vous avez absolument raison! – Vor

Questions connexes