Django视图中带可选参数的永久链接

2 投票
1 回答
655 浏览
提问于 2025-04-17 05:43

我正在尝试用一个视图来处理两种不同的URL模式,方法是使用可选参数来定义这个视图。

我参考了这篇文章这个问题的建议。

这是我在urls.py中的URL模式代码:

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'),
)

这是视图的定义:

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有两个参数。所以我得到的URL是这样的:domain.com/slug//,而不是这样:domain.com/slug/。

我该如何获取没有第二个参数的绝对URL呢?我是不是做错了什么?

谢谢!

1 个回答

0

在你的 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

撰写回答