【问题标题】:Django 2.3 Inside get_absolute_url, Reverse for 'post_detail' not foundDjango 2.3内部get_absolute_url,找不到'post_detail'的反向
【发布时间】:2020-07-10 11:08:47
【问题描述】:

主要的 urls.py 包括:

path('', include('page.urls', namespace='page'))

页面应用 urls.py

app_name = 'page'

urlpatterns = [
    path('', views.home, name='home'),  
    path('page/<slug:slug>/', views.page_detail, name='page_detail'),

]

页面应用models.py

    class Page(models.Model):
        .
        .
        .
         def __str__(self):
             return '{} by {} {}'.format(self.title, self.created, self.is_active)

         def get_absolute_url(self):
             return reverse("page_detail", kwargs= {"slug": self.slug })

In page app views.py:

    def home(request):

        pages = Page.objects.filter(is_active=1)

        context = {

            "pages":pages
        }

        return render(request,'page/home.html', context)

    def page_detail(request, slug):

        details = get_object_or_404(Page, slug=slug, is_active='1')

        return render(request,'page/details.html', {'details': details})


In the menu.html under templates/page:

    <nav class="collapse navbar-collapse bs-navbar-collapse navbar-right" role="navigation">
                <ul class="nav navbar-nav">
                    {% for obj in pages %}
                    <li><a href='{{obj.get_absolute_url}}'>{{ obj.title }}</a></li>
                    {% endfor %}

                </ul>
    </nav> 

我为什么会得到:

未找到“page_detail”的反向。 'page_detail' 不是有效的视图函数或模式名称。

但如果我在模板/页面下使用&lt;li&gt;&lt;a href='/page/{{obj.slug}}'&gt;{{ obj.title }}&lt;/a&gt;&lt;/li&gt; in menu.html,它就可以正常工作。 get_absolute_url 无法正常工作。我做错了什么?

【问题讨论】:

    标签: python django


    【解决方案1】:
    def get_absolute_url(self):
             return reverse("page:page_detail", kwargs= {"slug": self.slug })
    

    当您进行反向 url 查找时,您还应该添加应用名称

    【讨论】:

    • 非常感谢,但是为什么其他的代码可以工作,他们也是直接使用URL名称,是与版本有关还是什么。
    • 在模板中调用 url 的正确方法是 {% url 'appname:your_detail_url' object.slug %} 如果你没有使用获取绝对 url 方法
    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2010-10-12
    • 2013-10-05
    • 2023-03-09
    相关资源
    最近更新 更多