【问题标题】:Django views opens different contentDjango 视图打开不同的内容
【发布时间】: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" alt="..."></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" alt=""/>
                </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/&lt;int:pk&gt;//slide/&lt;int:pk&gt;/,问题就消失了。
  • 谢谢,但是当我这样做时,它给了我 404,但是,当我从 /sub// 中删除第一个 / 时,离开 sub// 它可以工作完美。再次感谢您。你知道我怎样才能找到这方面的文档以了解更多信息吗?

标签: html django url view django-views


【解决方案1】:

我已经创建了 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'),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多