Я использую Django 1.9.7 с Python 3.5.1Использование URL в Django 1.9
Я довольно новичок в Django, создавая простое приложение. В настоящее время у меня проблема с URL-адресами.
Я хотел бы иметь следующее поведение: если пользователь получает HTTP: .../запись/2016/03 он видит данные за март 2016 года но если пользователь получает т: HTTP: .../запись затем вместо того, чтобы получать 404, он должен быть перенаправлен на http: .../entry/2016/06 (предположим, что мы в июне 2016 года).
В настоящее время, вот как я это сделал:
url(r'^entry/$', Entry.as_view(), name='entry0'),
url(r'^entry/(?P<year>\d{4})/(?P<month>\d{1,2})/$', Entry.as_view(), name='entry'),
и вид определяется как:
def get(self, request, year=datetime.datetime.year, month=datetime.datetime.month):
в шаблоне, у меня есть:
<li><a href="{% url 'entry' year month%}">Entry</a></li>
Этот вопрос что, когда я перехожу к/входу, я получаю следующую ошибку:
NoReverseMatch at /entry/
Reverse for 'entry' with arguments '(<attribute 'year' of 'datetime.date' objects>, <attribute 'month' of 'datetime.date' objects>)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['entry/(?P<year>\\d{4})/(?P<month>\\d{1,2})/$']
Однако получение/ввод/2016/06 работает правильно.
Какой будет самый чистый способ заставить это работать? Могу ли я достичь этого с помощью одного URL-адреса и представления?
С наилучшими пожеланиями
Жан-Ноэль
#Как было предложено, я изменил чуток мнение:
def get(self, request, year=None, month=None):
if year is None:
year = datetime.datetime.today().year
if month is None:
month = datetime.datetime.today().month
context = {'current_date': datetime.datetime.now(),
'year': year,
'month': month,
}
URL-адреса остаются прежними:
url(r'^entry/$', Entry.as_view(), name='entry0'),
url(r'^entry/(?P<year>\d{4})/(?P<month>\d{1,2})/$', Entry.as_view(), name='entry'),
шаблон указывает только на пустой URL:
<li><a href="{% url 'entry0' %}">Entry</a></li>
Это похоже на работу; при нажатии на ссылку в шаблоне меня отправляют значения по умолчанию; но если я укажу значение в URL-адресе, меня отправят на правильные значения.
Мой последний вопрос: не могу ли я сделать это в одном виде и URL-адресе? В принципе, при использовании/entry параметры будут установлены на None, тогда как при их указании они будут получены в представлении.
Большое спасибо
Жан-Ноэль
Ваши переменные в шаблоне имеют nge, как их установить? – RemcoGerlich