python - 传递参数时 Django URL 出错
问题描述
我正在设置一个新的 URL 路径,但一直找不到页面。这是我的 URL 不起作用:
url(r'^collections/(?P<collection_name>\d+)$', collections.home, name='collections'),
这是我认为的功能:
def home(request, collection_name, slug=None):
collection_data = Collections.objects.get(collection_name=collection_name)
try:
logged_id = request.GET.get('admin_id')
except:
logged_id = ""
return render(request, 'collections.html', {'collection_data':collection_data,'logged_id':logged_id})
这是我得到的错误:
如果我把它变成一个简单的 URL 并从 URL 和视图函数中删除参数,如下所示,它工作正常,所以我知道我指向正确的视图:
url(r'^collections$', collections.home, name='collections'),
在同一个文件中,我有另一个 URL,如下所示,它也可以正常工作:
url(r'^store/(?P<seller_id>\d+)$', store.home, name='store'),
这让我相信我有一个简单的错字或一些我忽略的非常基本的东西。谁能帮我在这里发现错误?谢谢!
解决方案
url 函数用于regex
捕获参数。当你写\d+
它时,它期望在那个地方有一个或多个数字(数字)。collection_name
是一个字符串,所以它不会匹配\d+
。您应该编写一个可以匹配字符串的模式,例如[^/]+
url(r'^collections/(?P<collection_name>[^/]+)$', collections.home, name='collections'),
path
除非您确实需要将某些 url 与复杂的正则表达式匹配,否则最好转向使用该函数:
from django.urls import path
path('collections/<str:collection_name>', collections.home, name='collections'),
注意:理想情况下,应该以斜杠结束其 url 模式
/
。默认情况下,Django 在任何传入的 url 中添加一个尾部斜杠,并将用户重定向到这个新的 url。导致人们面临网址不适合他们的问题。
推荐阅读
- javascript - Firebase 更新配置文件未在第一次尝试中更新配置文件 || 承诺不处理 || 显示名称
- javascript - 未在 useEffect 中设置状态
- flutter - 如何刷新 FutureBuilder 数据并刷新同级小部件?
- git - GIT 中本地、远程和远程跟踪分支之间的区别
- python - 如何检查 Python 集合是否已订购?
- javascript - Setinterval 一次触发多次
- python - 计算字符串中序列的百分比
- linux - aide fi:排除/a/b,但监控/a/b/c/d
- python-3.x - 与 Stripe 的网络通信失败 - Google App Engine Python 3.7
- python - 如何在python中搜索字符串中的两个连续字符