在Django中将默认参数值传递给视图方法不起作用

时间:2018-11-24 06:41:36

标签: django

我对Django非常陌生。 我正在尝试使用带有可选参数的网址, 如果我传递包含可选参数的URL,则一切都会按预期工作,但是当我尝试使用不带可选参数的URL时,将收到404页面未找到错误。

我的 urls.py 文件内容

from coffeehouse.stores import views as stores_views
urlpatterns = [
    url(r'^store/(?P<store_id>\d+)/',stores_views.details)
]

stores / views.py 文件内容

def details(request, store_id='1'):
store_info={
    'store_id':store_id
}
return render(request, 'stores/details.html',store_info)

我无法弄清楚为什么不考虑默认参数。

  

我正在使用Django 1.11,不确定是否与Django版本相关。

2 个答案:

答案 0 :(得分:0)

希望这对以后的人有帮助。

我解决了这个问题。我几乎忘了在 urls.py 文件中加入一行。

此更改解决了我的问题。

from coffeehouse.stores import views as stores_views
urlpatterns = [
    url(r'^store/$',stores_views.details)
    url(r'^store/(?P<store_id>\d+)/',stores_views.details)
]

答案 1 :(得分:0)

您可以提供2个不同的URL,一个用于处理带参数的URL,另一个用于处理不带参数的URL

  

别忘了在网址末尾添加sudo chown -R $USER:$USER . 符号

$

如果您使用urlpatterns = [ url(r'^store/$',stores_views.details) url(r'^store/(?P<store_id>\d+)/$',stores_views.details) ] 访问该网站,则Django首先会尝试找到匹配的第一个模式。在我们的情况下,第一个将匹配。

如果您使用127.0.0.1:8000/store访问该网站,则Django首先会尝试找到匹配的第一个模式。第一个永远不会匹配,因此Django将尝试第二个,当然它将匹配。