我正在尝试在问题网址的末尾附加参数no_rep
,作为显示不同视图的信号。我正在使用 Django 1.8 ,并遵循askbot的网址格式。
这是 url.py :
url(
(r'^%s(?P<id>\d+)/' % QUESTION_PAGE_BASE_URL.strip('/') +
r'(%s)?' % r'/no-rep:(?P<no_rep>\w+)'),
views.readers.question,
name='question'
),
我试图根据URL中no_rep
的值来显示不同的显示。
这是视图:
def question(request, id, no_rep):
if no_rep == '1':
request.session['no_rep'] = True
else:
request.session['no_rep'] = False
我找不到有关+,%和?的信息。这样做,这可能是问题所在。有人可以解释正则表达式如何与基本网址一起使用吗?当我输入网址http://localhost:8000/question6/test-question/no_rep:1
时,request.session['no_rep']
应该设置为true,但事实并非如此。我想念什么?
答案 0 :(得分:0)
所有替换(%):r'^question(?P<id>\d+)/(/no-rep:(?P<no_rep>\w+))?'
之后,您的url如下所示:
1. test-question
的一部分
2.您在命名组no_rep
(这是合法的,但not recommended)周围有奇数分组
对于http://localhost:8000/question6/test-question/no_rep:1
这样的网址,您的网址格式应如下所示:
r'^%s(?P<id>\d+)/test-question/(?:no_rep:(?P<no_rep>\d+))?' % QUESTION_PAGE_BASE_URL.strip('/')
(如果您也希望字母匹配,则可以在\ w +的最后一组更改\ d +)。
关于非捕获组(?:...)
以及+和?的含义。您可以阅读Python re模块的documentation。
答案 1 :(得分:0)
将您的网址格式更改为类似的内容,
urlpatterns = [
url(r'question/(?P<id>\d+)/no-rep/(?P<no_rep>\w+)/', question),
]
OR
QUESTION_PAGE_BASE_URL = "question"
urlpatterns = [
url(r'{QUESTION_PAGE_BASE_URL}/(?P<id>\d+)/no-rep/(?P<no_rep>\w+)/'.format(
QUESTION_PAGE_BASE_URL=QUESTION_PAGE_BASE_URL), question),
] + router.urls
注意:
最好不要使用 named groups
之类的 id
和一些字符串或字符(如网址,{localhost:8000/question6/
)