Django 视图打开不同的内容
Posted
技术标签:
【中文标题】Django 视图打开不同的内容【英文标题】:Django views opens different content 【发布时间】:2021-01-15 04:58:55 【问题描述】:我是 Django 新手。我创建了 2 个单独的视图和 URL,但是,当我加载我的开发服务器并单击幻灯片以打开 slides_detail.html 时,它会打开 sub_detail.html,此时我不知道是什么原因导致的,因为没有类似的名称这将导致打开完全不同的详细信息页面。幻灯片和子内容都位于同一个 HTML 文档中,与 URL 和视图相同。没有错误,可以显示。提前致谢:
网址:
path('<int:sub_id>/', views.sub_detail, name='sub_detail'),
path('<int:slides_id>/', views.slides_detail, name='slides_detail'),
观看次数:
# Will show specific sub content details
def sub_detail(request, sub_id):
subcontent = get_object_or_404(SubContent, pk=sub_id)
context =
'subcontent': subcontent,
return render(request, 'home/sub_detail.html', context)
# Will show specific slides content details
def slides_detail(request, slides_id):
slides = Slides.objects.get(pk=slides_id)
context =
'slides': slides,
return render(request, 'home/slides_detail.html', context)
幻灯片的 HTML:
% for slides in slides %
<div class="swiper-slide">
<div class="card">
<a href="% url 'slides_detail' slides.id %">
<img src=" slides.image.url " class="card-img-top img-height" ></a>
<div class="card-body bg-dark">
<h5 class="card-title text-light font-weight-bold text-center"> slides.title </h5>
</div>
</div>
</div>
% endfor %
子内容的 HTML:
% for sub in subcontent %
% if forloop.counter|divisibleby:2 %
<div class="row">
% if sub.image %
<div class="col-md-6 section-index-img">
<img src=" sub.image.url " class="rounded img-fluid" />
</div>
% endif %
<div class="col-md-6">
<a href="% url 'sub_detail' sub.id %">
<h4> sub.title </h4>
</a>
<p class="text-muted"> sub.description | linebreaks </p>
</div>
</div>
% else %
【问题讨论】:
模板重叠,因此路径/2
将触发第一个匹配的视图,在本例中为sub_detail
。
我需要为此更改视图或 URL 吗?
您需要为每个网址添加前缀或后缀,以便它仅匹配您想要的一种情况。如果您有 sub_id == 1
的记录和 slide_id == 1
的记录,则 url /1/
将匹配列表中的第一个。改为调用这些/sub/<int:pk>/
和/slide/<int:pk>/
,问题就消失了。
谢谢,但是当我这样做时,它给了我 404,但是,当我从 /sub/我已经创建了 2 个单独 视图和 URL,但是,当我加载我的开发服务器并单击幻灯片以打开
slides_detail.html
时,它会打开sub_detail.html
。
您没有创建两个单独的 URL,而是创建了相同的路径。两条路径将以相同的模式触发。这意味着如果你有一个% url 'slides_detail' 42 %
,例如,它将被写为/42
,但这也是sub_detail
的有效路径,所以当你使用该路径发出请求时,Django会“ fire" 第一个匹配的视图,在本例中为 sub_detail
。
您应该使路径不重叠,例如:
path('sub/<int:sub_id>/', views.sub_detail, name='sub_detail'),
path('slide/<int:slides_id>/', views.slides_detail, name='slides_detail'),
【讨论】:
以上是关于Django 视图打开不同的内容的主要内容,如果未能解决你的问题,请参考以下文章