Skip to main content
 首页 » 编程设计

python之带有可选参数的 View 中的 Django 永久链接

2025年05月04日25leader

我正在尝试通过在 View 定义中使用可选参数,使用一个 View 来解析两个 url 模式。 我正在关注 this post 的建议和 this other question .

这是我的 url 模式代码 urls.py:

urlpatterns = patterns('myapp.views', 
    url(r'^(?P<slug>[\w-]+)/$', 'my_view', name='main_url'), 
    url(r'^(?P<slug>[\w-]+)/(?P<optional>[\w-]*)/$', 'my_view', name='optional_url'), 
) 

以及 View 的定义:

def my_view(request, slug, optional=None): 

就根据 url 模式显示模板而言,一切正常。 但是,当我尝试使用模型永久链接显示链接时,它会中断。我按照 django 文档中解释的获取模型绝对 url 的方式。

这是我的模型的代码:

class MyModel(models.Model): 
    name = models.CharField(max_length=128) 
    slug = models.CharField(max_length=32) 
 
    @models.permalink 
    def get_absolute_url(self): 
        return ('main_url', [self.slug]) 

问题是 get_absolute_url 返回一个带有两个参数的 url。所以我得到了类似这个 domain.com/slug//而不是这个 domain.com/slug/

如何在没有第二个参数的情况下获取绝对 url? 我做错了什么吗?

谢谢

请您参考如下方法:

您在 get_absolute_url 函数中返回一个列表,这就是您获得两个参数的原因。 你可以这样做:

class MyModel(models.Model): 
    name = models.CharField(max_length=128) 
    slug = models.CharField(max_length=32) 
 
    @models.permalink 
    def get_absolute_url(self): 
        return "/%s/" % self.slug