【问题标题】:Django Error: Reverse for 'blog_detail_url' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['blog/(?P<id>\\d+)$']Django 错误:“blog_detail_url”的反向参数“(”,)”和关键字参数“{}”未找到。尝试了 1 种模式:['blog/(?P<id>\\d+)$']
【发布时间】:2017-01-22 06:51:29
【问题描述】:

在我的博客上,我正在尝试创建一个 URL 寻呼系统,我可以在其中通过 Post 模型的 ID 链接到上一篇和下一篇文章。现在,每次我尝试访问博客网页时都会收到此错误:

NoReverseMatch at /blog/2
Reverse for 'blog_detail_url' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['blog/(?P<id>\\d+)$']

views.py:

def blog_detail(request, id):
    # post request from the url
    return render(request, "BlogHome/pages/post.html")
    post = Post.objects.get(id)

    # Next Post
    try:
        Next_Post_id = (post.id + 1)
        Next_Post = Post.objects.get(id=Next_Post_id)
    except ObjectDoesNotExist:
        Next_Post = None

    # Previous Post
    try:
        Previous_Post_id = (post.id - 1)
        Previous_Post = Post.objects.get(id=Previous_Post_id)
    except ObjectDoesNotExist:
        Previous_Post = None

    context = {'post': post, 'Next_Post': Next_Post, 'Previous_Post': Previous_Post}
    return render(request, "BlogHome/pages/post.html", context)

urls.py:

urlpatterns = [
url(r'^$', views.blog_list),
url(r'^(?P<id>\d+)$', views.blog_detail, name='blog_detail_url'),
]

post.html:

{% extends "BlogHome/includes/WELL.html" %}

{% block content %}
<script>
document.title = "Pike Dzurny | {{post.title}}"
</script>

<div class="container-fluid text-center">

    <center>

        <div class="well" id="WellPost">

            <div class="container-fluid">

                <h2 align="center" id="TitleText">{{post.title}}</h2>
                <h3 align="center" id="BodyText">{{ post.date|date:"m-d"}}</h3>
                <h3 align="left">{{ post.body|safe }}</h3>

                {% if Next_Post is defined and Previous_Post is defined %}
                <ul class="pager">
                    <li class="previous"><a href="{% url 'blog:blog_detail_url' Post.id %}"><span
                            aria-hidden="true">&larr;</span> Older</a></li>
                    <li class="next "><a href="{% url 'blog:blog_detail_url' Next_Post.id %}">Newer <span
                            aria-hidden="true">&rarr;</span></a></li>
                    <h1>1</h1>
                </ul>

                {% elif Next_Post is defined %}
                <ul class="pager">
                    <li class="previous disabled"><a href=""><span aria-hidden="true">&larr;</span> Older</a></li>
                    <li class="next"><a href="{% url 'blog:blog_detail_url' Next_Post.id %}">Newer <span aria-hidden="true">&rarr;</span></a>
                    </li>
                </ul>
                <h1>2</h1>

                {% elif Previous_Post is defined %}
                <ul class="pager">
                    <li class="previous"><a href="{% url 'blog:blog_detail_url' Post.id %}"><span aria-hidden="true">&larr;</span>
                        Older</a></li>
                    <li class="next disabled"><a href="">Newer <span aria-hidden="true">&rarr;</span></a></li>
                </ul>
                <h1>3</h1>

                {% else %}
                <ul class="pager">
                    <li class="previous disabled"><a href="{% url 'blog:blog_detail_url' Post.id %}"><span aria-hidden="true">&larr;</span> Older</a></li>
                    <li class="next disabled"><a href="{% url 'blog:blog_detail_url' Next_Post.id %}">Newer <span aria-hidden="true">&rarr;</span></a></li>
                </ul>
                <h1>4</h1>
                {% endif %}


            </div>
    </center>
</div>

{% endblock %}

错误发生在 post.html (&lt;li class="previous"&gt;&lt;a href="{% url 'blog:blog_detail_url' Post.id %}"&gt;&lt;span aria-hidden="true"&gt;&amp;larr;&lt;/span&gt; Older&lt;/a&gt;&lt;/li&gt;) 的第 22 行。我猜,我不正确地设置了 jinja2 href?

【问题讨论】:

    标签: python django


    【解决方案1】:

    更改您的链接
    "{% url 'blog:blog_detail_url' Next_Post.id %}"
    

    "{% url 'blog:blog_detail_url' id=Next_Post.id %}"
    

    注意id=。您的 url 模式将 id 指定为 url kwarg。

    此外,根据经验,您不应使用大写字母命名变量。在 Python 中,标准的做法是使用小写的变量名,然后为类使用大写的名称。如果始终如一地这样做,它有助于使您的代码更具可读性。

    编辑

    这对我来说也有点可疑:{% if Next_Post is defined and Previous_Post is defined %} defined 是什么?我没有在上下文或其他任何地方看到它。我会这样做:

    {% if next_post %}
        {# ... #}
    {% endif %}
    

    【讨论】:

    • 错误现在是Reverse for 'blog_detail_url' with arguments '()' and keyword arguments '{'id': ''}' not found. 1 pattern(s) tried: ['blog/(?P&lt;id&gt;\\d+)$']
    • @PikeD。您将希望传递 id 而不是对象,因此将 next_post_id 粘贴到您的上下文中并使用它。
    • 啊,我没注意到。谢谢!
    • @PikeD。在您看来,当您尝试获取下一个帖子 id 时,它也有可能抛出异常并设置为 None
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 2020-05-13
    • 2023-03-11
    • 2016-11-12
    • 2021-05-11
    • 2015-02-08
    • 2021-12-12
    • 2018-11-21
    相关资源
    最近更新 更多