【问题标题】:How to include other app's urls.py in get_absolute_url: reverse() django?如何在 get_absolute_url: reverse() django 中包含其他应用程序的 urls.py?
【发布时间】:2020-03-07 19:01:13
【问题描述】:

在应用程序 models.py 中,我使用 get_absolute_url 使用不同应用程序 urls.py 中的“名称”反转到特定路径。

但是我当然会遇到错误,因为我没有为该应用创建 urls.py,因为 urlpattern 已经存在于其他一些 urls.py 中。

那么有没有可以反向使用的 include(app.urls) 类型的功能?

#app: A - urls.py
urlpatterns = [
path('post/<int:pk>/', PostDetailView.as_view(), name = 'post-detail'),
...
]

#app: B - models.py
def get_absolute_url(self):
    return reverse('post-detail',kwargs = {'post_id.id':self.post_id.id})

【问题讨论】:

  • 您是否将这些网址包含在您的基础应用程序中? stackoverflow.com/questions/15885030/django-include-app-urls
  • 您遇到的错误是什么? kwargs 应该是 kwargs={"pk": self.post_id.id},因为这是您的 path() 中的占位符。
  • @AKX 我收到了NoReverseMatch: ,我认为这是因为找不到 urlpattern,但它已经解决了你提到的同样问题。我给错了钥匙。非常感谢!
  • @Shamika 不客气。 :) 顺便说一句,如果您有一个名称以 _id 结尾的列,您的模型定义可能会有些问题。

标签: django django-urls


【解决方案1】:

在您的主 urls.py 文件中,您必须按如下方式添加所有应用程序 url,并在您的 get absolute 方法中调用它。您仅将此方法定义到该特定模型,并通过自身链接到实例。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('your_app.urls')),
]

您也可以将获取绝对方法修改为

def get_absolute_url(self):
    return reverse('post-detail',kwargs = {"pk": self.pk)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2016-10-12
    相关资源
    最近更新 更多