【问题标题】:How can I get an accurate absolute url from get_absolute_url with an included urls.py in Django?如何从 Django 中包含 urls.py 的 get_absolute_url 获取准确的绝对 url?
【发布时间】:2010-10-31 04:09:33
【问题描述】:

我现在正在构建一个应用程序,我正试图与我的 Django 项目中的其他应用程序保持适当的解耦(请随时教我如何保持 Django 应用程序解耦,我很乐意了解更多/一直)。

我的问题是这样的:我编写的 get_ absolute_url() 方法正在返回基于我的视图的相对路径。我认为必须在项目 urls.py 中添加一个特殊的命名视图是错误的,这样我才能在我的应用程序中拥有绝对 url,而且我不知道我做错了什么。因此,如果有人可以帮助我,我将非常感激(并在我释放这个傻瓜时提及你!)

我有一个项目级 urls.py,其中包含另一个基于 URL 模式的 urls.py(名称仅在本示例中是冗长的):

项目-urls.py

urlpatterns = patterns('',
    ('^$', direct_to_template, {'template': 'base.html'}),
    (r'^app', include('project.app.urls')),
)

app-urls.py

urlpatterns = patterns('',
    url(r'(?P<slug>[-\w]+)?/?$', 'app.views.home', name='app_home'),
)

现在,在我的模型中,我有这样的东西:

class AppModel(models.Model):
    title               = models.CharField(_('title'), max_length=100)
    slug                = models.SlugField(_('slug'), unique=True)

    @permalink
    def get_absolute_url(self):
        return ('app_home', None, {'slug': self.slug})

当我在模板中调用 {{ AppInstance.get_ absolute_url }} 时,我得到如下信息:

/slug-is-here

根据我的 urls.py,这不是绝对的并且是有意义的。我应该改变什么来获得一个真正的绝对网址,同时保持这个应用程序干净并且不要将它与项目耦合得太深?

【问题讨论】:

  • "我认为必须在项目 urls.py 中添加一个特殊的命名视图是错误的,这样我才能在我的应用程序中拥有绝对 url" 为什么? “命名”这种 API 似乎很重要。为什么你认为给公共界面视图函数打上标签是错误的?
  • 这可能是错误的。我的意思是,由于我的项目的 urls.py 中已经有一行用于此应用程序,那么我不应该在项目 urls 级别为我的应用程序中的模型添加额外的行。 ie - project-urls: (r'app', include('app.urls')), (r'app/', 'path.to.view',name='extra-line-in -project'), app-urls # empty 无论如何,我发现我做错了什么,现在我要更新我的问题。

标签: python regex django url models


【解决方案1】:

请,

原来当我看到这个的时候:

/slug-is-here

我应该仔细看看。真正发生的是:

/app-pathslug-is-here

在我的项目 urls.py 中,我的应用正则表达式缺少尾部斜杠。

所以是的。让这成为你们所有人的一个教训。

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多