【问题标题】:No Topic matches the given query没有主题与给定的查询匹配
【发布时间】:2020-06-25 22:10:28
【问题描述】:

enter image description here我正在 Python Crash Course 中学习第 18 章 18.4.3,当我打开 http://localhost:8000/topics/1 时,我遇到了这个问题 - 没有主题与给定的查询匹配。 Django 3.0.7 和 python 3.8

views.py

from django.shortcuts import render,get_object_or_404
from .models import Topic


def index(request):
    return render(request, 'learning_logs/index.html')

def topics(request):
    topics = Topic.objects.order_by('date_added')
    context = {'topics': topics}
    return render(request,'learning_logs/topics.html',context)
def topic(request,topic_id):
    topic = get_object_or_404(Topic,id=topic_id)
    entries = Topic.entry_set.order_by('-date_added')
    context={'topic':topic},{'entries':entries}
    return render(request,'learning_logs/topic.html',context)

urls.py

app_name = 'learning_logs'
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('topics/',views.topics,name='topics'),
    path('topics/<int:topic_id>/', views.topic, name='topic'),
]

topics.html

{% extends "learning_logs/base.html" %}
{% block content %}
  <p>Topics</p>
  <ul>
      {% for topic in topics %}
        <li>{{ topic }}</li>
        <li>
            <a href="{% url 'topic' topic_id %}">{{ topic }}</a>
        </li>
      {% empty %}
        <li>No topics have been added yet.</li>
      {% endfor %}
  </ul>
{% endblock content %}

topic.html

{% extends 'learning_logs/base.html' %}
{% block header %}
  <h2>{{ topic }}</h2>
{% endblock header %}
{% block content %}
  <p>Entries:</p>
   <ul>
       {% for entry in entries %}
         <li>
             <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
             <p>{{ entry.text|linebreaks }}</p>
         </li>
      {% empty %}
      <li>There are no entries for this topic yet.</li>
      {% endfor %}
    </ul>

{% endblock content %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果你将多个项目传递给模板,你应该在 一个 字典中传递它,所以:

    def topic(request,topic_id):
        topic = get_object_or_404(Topic,id=topic_id)
        entries = Topic.entry_set.order_by('-date_added')
        context = {'topic':topic, 'entries':entries}
        return render(request,'learning_logs/topic.html',context)

    通过编写 context={'topic':topic},{'entries':entries},您构建了一个包含两个字典的 2 元组。

    在模板中,您还应该使用`topic: 的.id 属性:

    &lt;a href="{% url '<b>learning_logs:</b>topic' <b>topic.id</b> %}"&gt;{{ topic }}&lt;/a&gt;

    请注意,数据库需要包含具有给定 ID 的 Topic 对象(此处为 1)。如果不是这样,那么页面当然不能呈现不存在的Topic 的详细信息。

    【讨论】:

    • 我把它改成这个,但我得到了同样的结果。
    • 未找到:/topics/1/ [26/Jun/2020 06:32:59] "GET /topics/1/ HTTP/1.1" 404 1733
    • @dkemf: 你确定在数据库中有一个具有这个ID的主题吗?
    • 是的,我会上传一个主题.html。稍后再等等。
    • @dkemf:这不是存储在模板中,而是存储在数据库中。
    猜你喜欢
    • 2015-03-25
    • 2017-03-08
    • 1970-01-01
    • 2021-05-07
    • 2019-07-21
    • 2021-11-21
    • 2016-12-05
    • 2022-10-05
    • 2018-09-22
    相关资源
    最近更新 更多