django NoReverseMatch at / Reverse for 'story' with keyword arguments '|' id ':未找到“}”,已尝试1种模式:['故事/(?P < id>[0-9]+)\\Z']

liwlm1x9  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(99)

我得到这个错误:NoReverseMatch at / Reverse for 'story' with keyword arguments '{'id': ''}' not found. 1 pattern(s) tried: ['story/(?P<id>[0-9]+)\\Z']
对于我的模板中的这一行:.
当我试图将它打印到屏幕({{ subject.list.0.id }})时,它会打印id,没有任何问题,但由于某种原因,当我试图将它传递到<a href="{% url 'story' id=subject.list.0.id %}">时,它不起作用。
URL:path("story/<int:id>", views.story, name="story")
观点:

def story(request, id):
story = Story.objects.get(id=id)
last_post = story.posts.all()[::-1][0]
return render(request, "story.html", {
    "posts": story.posts.all(),
    "deadline": last_post.deadline,
})

页面视图:

def index(request):
user = User.objects.get(id=request.user.id)
user_genre = user.genres.all()
stories = [{'list': Story.objects.order_by("-likes").all()[0:20], 'popular': 'true'}, 
            {'list': Story.objects.all()[::-1][:20], 'new': 'true'}, ]
for genre in user_genre:
    stories.append({'list': Story.objects.filter(genres=genre)[0:20], "genre": genre})
print(stories)
return render(request, "homepage.html", {
    "genres": Genre.objects.all(),
    "user": User.objects.get(id=request.user.id),
    "stories": stories
})
  • 主页模板中的“主题”来自{% for subject in stories %}
    编辑:

当我尝试执行stories=Story.objects.all(),然后在模板中使用它作为<a href="{% url 'story' id=subject.id %}">link</a>时,它的工作效果令人惊讶。然而,我的意图不是使用所有的职位。相反,我尝试使用以下结构将故事传递给模板:

stories = [{'list': Story.objects.order_by("-likes").all()[0:20], 'popular': 'true'},
           {'list': Story.objects.all()[::-1][:20], 'new': 'true'}, ]

现在,当我尝试打印{{ subject.list.0.id }}时出现了一个问题。它成功地打印了ID,但我无法以以下方式传递ID:<a href="{% url 'story' id=subject.list.0.id %}">。不幸的是,这种方法不起作用。
下面是一个例子来说明这个问题:

{{ stories }}<br><br>
{{ subject }}<br><br>
{{ subject.list }}<br><br>
{{ subject.list.0 }}<br><br>
{{ subject.list.0.id }}<br><br>

有什么问题吗?我错过了什么?我将感谢任何帮助!

jaxagkaj

jaxagkaj1#

问题是您没有检查{{ subject.list.0 }}是否存在。一个简单的解决方法是仅在长度为subject.list > 0时访问{{ subject.list.0.id }}
试试这个jinja片段

{%for subject in stories%}
    {% if subject.list|length > 0 %}
        <a href="{% url 'story' id=subject.list.0.id %}">link</a>
    {% endif %}
{% endfor %}
a11xaf1n

a11xaf1n2#

这里我设置了一个小项目的解决方案,我这边工作正常,请检查你那边

views.py

def AllstoriesView(request):
  data = Story.objects.all()
  context = {
      'data': data
  }
  return render(request, 'index.html', context)

def GetStoryView(request, id):
  story = Story.objects.get(id=id)
  context = {
      'story': story
  }
  return render(request, 'singlestory.html', context)

urls.py

urlpatterns = [
 
    path('story/', AllstoriesView,name='story'),
    path('story/<int:id>', GetStoryView,name='story'),
 
]

列出Stories的Html代码

{% extends "base.html" %}
{% load static %}
{% block title %}
     Index | Page 
{% endblock title %}
   
{% block body %}
  <!-- Using slicing -->
  <h3>Using slicing</h3>
  <table>
    <thead>
      <th>Title </th>
    </thead>
    <tbody>
      <tr>
        <td>{{data.0.title}}</td>
        <td><a href="{% url 'story' id=data.0.id %}">link</a></td>
      </tr>
    </tbody>
  </table>
  <hr> <br> <br>

  <!-- Using For loop -->
  <h3>Using For loop</h3>
  <table>
    <thead>
      <th>Title</th>
    </thead>
    <tbody>
      {% for i in data %}
      <tr>
        <td>{{i.title}}</td>
        <td><a href="{% url 'story' id=i.id %}">link</a></td>
      </tr>
      {% endfor %}
    </tbody>
  </table>
{% endblock body %}

获取Stories的Html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h3>Single story</h3> <br> <br>

    <li>{{story.title}}</li>

</body>
</html>

管理面板

浏览器输出

相关问题