Django постоянная ссылка из вида с необязательными параметрами - PullRequest
2 голосов
/ 06 ноября 2011

Я пытаюсь использовать одно представление для разрешения двух шаблонов URL, используя необязательные параметры в определении представления.Я следую рекомендациям этого поста и другого вопроса .

Вот мой код для шаблонов 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'),
)

И определение представления:

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

Все работает отлично, даже если отображаются шаблоны в соответствии с шаблонами URL.Однако, когда я пытаюсь отобразить ссылки, используя постоянные ссылки на модель, они ломаются.Я следую способу получения абсолютного URL модели, как описано в django docs.

Вот код моей модели:

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 без второго аргумента?Что-то я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 06 ноября 2011

Вы возвращаете список в вашей функции 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
...