gpt4 book ai didi

python - Django url 没有事件与给定的查询匹配?

转载 作者:行者123 更新时间:2023-12-01 08:59:12 25 4
gpt4 key购买 nike

我正在尝试编写一个 slug 字段,以便用户可以查看我的 activity_detail 页面。我认为我编写的代码是正确的,但我收到 404 错误,No Activity matches the给定的查询。
。这是我的代码:

我的 urls.py

from django.urls import re_path
from . views import activity_list, activity_detail, activity_index

app_name = 'activity'

urlpatterns = [
re_path(r'^$', activity_index, name='index'),
re_path(r'^(?P<year>[0-9]{4})/$', activity_list, name='list'),
re_path(r'^(?P<year>[0-9]{4})/(?P<slug>[\w-]+)/$', activity_detail, name='detail'),
]

我的观点.py:

def activity_detail(request, year, slug=None):
activity = get_object_or_404(Activity, year=year, slug=slug)
context = {
'activity': activity,
}
return render(request, "activity/detail.html", context)

我计划从浏览器中调用我的 URL 地址,如下所示:

http://localhost/activity/
http://localhost/activity/2018/
http://localhost/activity/2018/myactivity

最佳答案

此方法的唯一问题是,如果您不指定 slug,则将使用 slug=None 调用 View ,然后使用 slug=None,这会失败。

您可以通过 None 检查来解决此问题:

def activity_detail(request, year, slug=None):
filter = {'year': year}
if <b>slug is not None</b>:
filter['slug'] = slug
activity = get_object_or_404(Activity, <b>**filter</b>)
context = {
'activity': activity,
}
return render(request, "activity/detail.html", context)

所以这里我们首先创建一个初始的filter字典,其中只包含年份,如果slug不是None,然后我们添加一个额外的过滤器。

但是我发现year过滤器相当奇怪:通常给定的year会有多个Activity >,这样就会出错。

如果您收到如下错误:

No Activity matches the given query.

这意味着您的数据库中没有包含给定年份和段的记录。 404 错误不是问题:它只是表示对于给定的 URL,没有相应的 Activity 对象可用。所以返回这样的错误是有意义的。

如果您想显示所有与过滤器匹配的Activity,您可以使用get_list_or_404 [Django-doc] .

关于python - Django url 没有事件与给定的查询匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587761/

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