Как настроить URL-адрес общих представлений на основе даты?
-
13-09-2019 - |
Вопрос
Вот мой шаблон URL-адреса:
news_info_month_dict = {
'queryset': Entry.published.filter(is_published=True),
'date_field': 'pub_date',
'month_format': '%m',
}
и
(r'^(?P<category>[-\w]+)/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[-\w]+).html$',
'object_detail', news_info_month_dict, 'news_detail'),
Но у них есть ошибка, подобная этой:
object_detail() got an unexpected keyword argument 'category'
Пожалуйста, помогите мне.Спасибо!
Решение
Я думаю, вам придется написать свое собственное представление вместо общего object_detail
, что-то вроде этого (непроверенное)
import datetime
def view_entry(request, category, year, month, day, slug):
date = datetime.date(int(year), int(month), int(day))
entry = get_object_or_404(Entry, slug=slug, date=date, is_published=True, category=category)
return render_to_response('news_detail', {'object': entry})
Хотя, возможно, это можно сделать с помощью object_detail
Я не знаю - я очень редко использую общие представления.
Другие советы
В вашем регулярном выражении URL все, что в <brackets>
передается в общее представление в качестве аргумента ключевого слова.
Проблема в том, что общий вид, который вы используете (object_detail
) не поддерживает все эти аргументы (а именно, category
).
Дополнительная информация об общем представлении object_detail и аргументах, которые он принимает.
Если вам нужен category
аргумент, просто оберните представление, как предложил Ник выше, и вызовите его из вашего URLconf .