gpt4 book ai didi

python - 如果在数据库中找不到查询集,如何退出 View 功能

转载 作者:太空宇宙 更新时间:2023-11-04 09:42:32 25 4
gpt4 key购买 nike

我的 django 项目“card”和“blog”中有两个应用

我的项目 urls.py 是:

urlpatterns = [
path('admin/', admin.site.urls),
path(r'', include(card.urls)),
path('', include('blog.urls')),]

“卡片”应用的 url.py 是:

urlpatterns = [
re_path(r'^card/$', views.cardindex, name='cardindex'),
re_path(r'^(?P<card_url_var>[-\w.]+)/$', views.carddet, name='carddetail'),]

“卡片”应用的 views.py 是:

def cardindex(request):
....

def carddet(request, card_url_var):
try:
url_carddetails = carddata.objects.get(page_end_url=card_url_var)
except carddata.DoesNotExist:
raise Http404("Card you are looking for, does not exists")
return render(request, 'card.html', {'url_carddetails':url_carddetails})

现在“博客”应用程序的 urls.py 是:

urlpatterns = [
re_path(r'^blog/$', views.articleindex, name='articleindex'),
re_path(r'^(?P<art_url_var>[-\w.]+)/$', views.articledet, name='articledetail'),]

用于博客应用程序的 viws.py 是: def 文章索引(请求): ....

def articledet(request, art_url_var):
try:
url_articledetails = articledata.objects.get(art_end_url=art_url_var)
except articledata.DoesNotExist:
raise Http404("Article you are looking for, does not exists")
return render(request, 'article.html', {'url_articledetails':url_articledetails})

当我请求“carddata”模型的“page_end_url”列中的 url 时,代码工作正常。但是当我请求位于“articledata”模型的“art_end_url”列中的 url 时,它返回 Http404“您正在寻找的卡不存在”。

例如:如果我请求 example.com/new-year-card-2018该代码工作正常,因为“page_end_url”列中存在“new-year-card-2018”。

但是如果我请求 example.com/best-designs-of-2018url“/best-design-of-2018”保存在“articledata”模型的“art_end_url”属性中。代码返回 Http404 “您正在寻找的卡,不存在”

所以请告诉我,如果请求的 url,即“card_url_var”与“page_end_url”不匹配,是否有办法退出“card”views.py 文件中的 carddet 函数。 我是 django 的新手。任何的意见都将会有帮助。提前致谢

最佳答案

您的请求不断调用您的 URL 模式中的第一个 URL 匹配项。

实际上,这两个 URL 几乎相同:

re_path(r'^(?P<card_url_var>[-\w.]+)/$', views.carddet, name='carddetail'),]

re_path(r'^(?P<art_url_var>[-\w.]+)/$', views.articledet, name='articledetail'),]

(?P<card_url_var>[-\w.]+)正在等待子弹:/slug-slug/

还有这个(?P<art_url_var>[-\w.]+) : /slug-slug/ .
所以 Django 会寻找第一个匹配的 URL,显然第一个会匹配。你可以做的是在每一个中添加不同的东西,比如:


re_path(r'^<b>card/</b>(?P<card_url_var>[-\w.]+)/$', views.carddet, name='carddetail'),]

re_path(r'^<b>article/</b>(?P<art_url_var>[-\w.]+)/$', views.articledet, name='articledetail'),]

关于python - 如果在数据库中找不到查询集,如何退出 View 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51129427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com