Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么可以';t Django是否反转这个带有一个可选参数的url正则表达式?_Regex_Django_Routing_Django Urls - Fatal编程技术网

Regex 为什么可以';t Django是否反转这个带有一个可选参数的url正则表达式?

Regex 为什么可以';t Django是否反转这个带有一个可选参数的url正则表达式?,regex,django,routing,django-urls,Regex,Django,Routing,Django Urls,我在我的根url配置中的blog下有一个应用程序名称空间: urlpatterns = patterns('',

我在我的根url配置中的
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: