Заставить @permalink decorator работать с общими представлениями django? - PullRequest
0 голосов
/ 10 октября 2010

Может быть, я что-то упускаю, но в соответствии с django docs (1.2), я настроил свои модели URL-адресов точно так, как указано, чтобы убедиться, что я не хард-кодирую URL, возвращаемые для get_absolute_url.иметь:

в urls.py

urlpatterns = patterns('django.views.generic.list_detail',
    url(r'^$','object_list',
            { 'queryset': product.objects.all(),
            'template_name': 'products/list.html',
            },
            name='product_list'),  
    url(r'^(?P<slug>[-\w]+)/$','object_detail',
            { 'queryset': product.objects.all(),
            'template_name': 'products/detail.html',
            },
            name='product_detail'), 
)

в models.py

@models.permalink
def get_absolute_url(self):
    return ('product_detail', (), {'slug': str(self.slug)})

Метод возвращает пустую строку в шаблонах и из оболочки даетошибка.

NoReverseMatch: Reverse for 'product_detail' with arguments '()' and keyword arguments '{'slug': 'dd-d--'}' not found.

Это должно разрешиться, если это не так, поскольку urls.py имеет имя: product_detail ?

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

Синтаксис кажется правильным, вы уверены, что ваш urls.py включен?Попробуйте войти в debuggin в коде представления и сначала используйте функцию reverse , чтобы сгенерировать URL.

Мое слепое предположение: что-то не так с вашим файлом urls.py в целом.

1 голос
/ 10 октября 2010

Попробуйте изменить эту строку:

url(r'(?P<slug>[-\w]+)/^$','object_detail',

до

url(r'^(?P<slug>[-\w]+)/$','object_detail',

Carret (^) обозначает начало строки, так что это нелогично в контексте, в котором вы ее написали, поскольку означает, что строка имеет содержимое еще до ее начала.

...