Regex 为什么可以';t Django是否反转这个带有一个可选参数的url正则表达式?
我在我的根url配置中的Regex 为什么可以';t Django是否反转这个带有一个可选参数的url正则表达式?,regex,django,routing,django-urls,Regex,Django,Routing,Django Urls,我在我的根url配置中的blog下有一个应用程序名称空间: urlpatterns = patterns('',
blog
下有一个应用程序名称空间:
urlpatterns = patterns('',
url(r'^blog/', include('blog.urls', namespace='blog')),
)
这是我在blog.url
下的blog索引的正则表达式:
urlpatterns = patterns('',
url(r'^(?:(?P<page_num>\d+)/)?$', views.index, name='index'),
)
基本上,我希望在导航到/blog/
时将url重定向到/blog/1/
,这就是为什么我将页面编号
设置为可选的原因。当然,转到/blog/n/
中的n
应该导航到相应的分页页面
但是,当我转到/blog/
或/blog/1/
时,没有加载任何内容,最终Django给了我“未收到数据”错误。我感觉我的正则表达式写得不正确,但我尝试了许多排列,没有任何运气(大多数给我“未找到页面”错误)
我也在官方Django文档中尝试过,即在blog.url
中指定:
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?<page_num>\d+)/$', views.index, name='index'),
)
但当我导航到/blog/
时,会出现以下错误:
TypeError at /blog/
index() takes exactly 2 arguments (1 given)
当我转到
/blog/1/
时出现“未收到数据”错误 查看函数page_num
属性没有默认值,因此它不是可选的。更改:
def index(request, page_num):
到
作为旁注。您可能还应该更改代码:
if not page_num:
到
这是更明确的。否则,将有多个不同的值触发重定向,例如
0
查看函数page_num
属性没有默认值,因此它是非可选。更改:
def index(request, page_num):
到
作为旁注。您可能还应该更改代码:
if not page_num:
到
这是更明确的。否则会有多个不同的值触发重定向,例如
0
。此外,对两个不同的URL模式使用相同的name
参数是不正确的。这完全违背了name
参数的目的。我还刚刚意识到它应该是return-redirect('blog:index',1)
而不是return-redirect('blog:index',args=[1]
。谢谢你的回答,还有额外的提示!另外,对两种不同的URL模式使用相同的名称参数是不正确的。这与名称参数的目的相反。我还刚刚意识到它应该是返回重定向('blog:index',1)
而不是返回重定向('blog:index',args=[1]
。谢谢你的回答,还有额外的提示!
if not page_num:
if page_num is None: