2012-07-23 60 views
1

請幫我解決urls.py 人建議這樣,但它簡化版,爲我工作.....正則表達式在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

我不知道django,但是你的正則表達式要求URL以'/'結尾,並且你的測試URL(http://127.0.0.1....MATH%20140)不會以'/'。你可以選擇它或刪除它。另外,''\ w | \ W] +'應該是'[\ w \ W] +',因爲'|'不代表'[]'中的任何內容。 (爲什麼不用'。+'呢?你在'[\ w \ W]中加入了新的行,而'。'沒有) – 2012-07-23 23:36:10

+0

在某種程度上,這也取決於多行標誌(m)被設置,我不認爲它是。第二個問題可能是該網址是網址編碼的,而該主題可能不是。 – 2012-07-23 23:38:21

+0

默認情況下,Django爲URL添加尾部斜槓。 url編碼問題最好通過添加一個不包含空格等的主題段或者使用[slugify過濾器]來處理(https://docs.djangoproject.com/en/1.3/ref/templates/builtins /#slugify)(並嘗試在視圖中反轉 - 最好添加一個實際的['SlugField']](https://docs.djangoproject.com/en/1.3/ref/models/fields/#slugfield )以避免那裏的困難)。 – Dougal 2012-07-23 23:43:57

回答

7

您的常規錯誤表達。

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

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

我想你想是這樣的:

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

但你如果你是新來這個你應該使用正則表達式生成器可能想要將'。+'更改爲更具限制性的內容:

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

請注意,由於Django將初始URL提供給URL調度程序,您可能不希望使用該前導斜槓。

+0

非常感謝你!!!!! Thant正是我​​需要的! – Vor 2012-07-23 23:54:39

+0

你絕對正確! – Vor 2012-07-24 00:11:07