【问题标题】:NoReverseMatch in Django but no clear issues (Answered by myself, good lessons for beginners)Django 中的 NoReverseMatch 但没有明确的问题(由我自己回答,适合初学者的好课程)
【发布时间】:2021-10-13 12:31:59
【问题描述】:

我一直在阅读其他解决方案,但没有一个适用于我的项目。这是一个家庭照片数据库。

问题

在正常工作的列表视图中,有两种类型的链接 - 一种在页面顶部创建新记录,另一种用于每个列出的项目以更新所选记录。

单击任一时,我都会收到以下错误。如果我只是输入 URL,我也会得到同样的错误。

NoReverseMatch at /stories/l_memories_update_people/4
Reverse for 'memories_people' not found. 'memories_people' is not a valid view function or pattern name.

.

模型

class memories_people(models.Model):
fk_user = models.ForeignKey(User, default='1', on_delete=models.CASCADE)
name = models.CharField(max_length=750, default='', blank=True, null=True)

def __str__(self):
    return self.name

class Meta:
    ordering = ('name', )

观看次数

    class v_memories_list_people(LoginRequiredMixin, ListView):
        model = memories_people
        template_name = 'storiesapp/t_memories_list_people.html'
        context_object_name = 'people'
        ordering = ['name']
    
    
   class v_memories_update_people(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    
        model = memories_people
        fields = ['fk_user', 'name']
        template_name = 'storiesapp/t_memories_update_people.html'
    
    
        def form_valid(self, form):
            form.instance.fk_user = self.request.user
            form.save()
            return HttpResponseRedirect(self.request.path_info)
    
        def test_func(self):
            post = self.get_object()
            if self.request.user == post.fk_user:
                return True
            return False

网址

    path('l_memories_list_people',v_memories_list_people.as_view(), name='r_memories_list_people'),
    path('l_memories_update_people/<int:pk>',v_memories_update_people.as_view(), name='r_memories_update_people'),
path('l_memories_create_people',v_memories_create_people.as_view(), name='r_memories_create_people'),

模板(列表)

{% load static %}
{% load crispy_forms_tags %}
{% load render_table from django_tables2 %}
{% load mptt_tags %}
    
<!DOCTYPE html>
<html>

<h1>People</h1>
<h3><a class="nav-item nav-link" href="{% url 'r_memories_create_people' %}">Create</a></h3>


{% block right %}

<table>
    {% for people in people %}
    <tr> 
        <td><h3>{{ forloop.counter }}</h3></td><
        <td><h3><a href="{% url 'r_memories_update_people' people.id %}">{{ people.name }}</h3></td>

    </tr>
    {% endfor %}
</table>



{% endblock %}

</html>

模板(更新)

{% extends "storiesapp/memories_base.html" %}
{% load static %}
{% load crispy_forms_tags %}


{% block content %}
<div>
    <h1>Update</h5>
</div>

    <div class="content_section">

        <form method="POST">
            {% csrf_token %}

            <fieldset class="form-group">

                <legend class="border-bottom mb-4">{{ memories_people.name }}</legend>
            
                <div>{{ form|crispy }}</div>

            </fieldset>
            # submit button

            <div class="form-group">
                    <button class="btn btn-outline-info" type="submit">Post</button>
            </div>

        </form>

    </div>

{% endblock content %}

【问题讨论】:

  • 您正在尝试在模板中使用 URL 来表示 r_memories_create_people,但该名称未在您的 urls.py 中的任何位置定义
  • 感谢您指出这一点,我在粘贴时不小心剪断了该行,但是它存在并且我已经更新了我的问题。无论如何,更新网址也会出现问题。
  • edit您的问题包含整个堆栈跟踪。
  • 对不起,我从来没有听说过这个词,我怎么能包括这个?如果这意味着显示所有未显示的模型和视图,我认为这个问题会膨胀,因为两者都有几十个,大多数与数据库是媒体库的目的无关。

标签: django django-urls


【解决方案1】:

对于像我这样的所有初学者来说,答案是不要被错误代码吓倒。如果您不理解信息的第一部分,请尝试阅读页面其余部分告诉您的内容。

此外,如果您的问题包含扩展另一个模板的模板,例如提供导航栏的模板,请在您的问题中包含此模板。

在此示例中,URL 已被重命名,并且在扩展的模板上不再正确。因为这个模板没有张贴在问题中,因为我什至没有考虑它,所以没有人能够看到所犯的错误。

感谢那些提出以下问题的人。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2015-02-11
    相关资源
    最近更新 更多