Цей предмет є продовженням мислення в Росії ця тема. Я знову опинився у проблемі зворотного від загальноїпогляди Останній раз я думав, що це не має зворотного збігу, тому що я використовував багато для багатьох, тепер я не маю багатьох взаємин у зворотному порядку, але проблема все ще там. Оскільки в обох випадках у мене є загальний вигляд в URL-адресах, я запропонував проблему в загальних виглядах і немає функцій перегляду. Спочатку я використовував декоратор @permalink у моделях
...
@permalink
def get_absolute_url(self):
return ("categories", str(self.id))
...
@permalink
def get_absolute_url(self):
return ("pages", (), {"page_name": self.human_readable_url})
URL-адреси
url(r"^(?P<page_name>&w*)?/?$", direct_to_template,
{"template": "basic.djhtml"},
name = "pages"),
url(r"cat/d+/$",
direct_to_template,
{"template": "basic.djhtml"},
name = "categories")
І виникла помилка:
NoReverseMatch: Зворотний для "сторінок" з аргументами "()" та аргументи ключових слів "{" page_name ": u" page1 "}" не знайдено.
Потім я спробував зворотний метод
def get_absolute_url(self):
return reverse("categories", args = [self.id, ])
І мати таку саму помилку
NoReverseMatch: реверс для "категорій" з аргументами "(2,)" і аргументи ключових слів "{}" не знайдено.
Виходячи з того, що permalink не явноВикористовуйте зворотний метод, я думаю, що проблема полягає в зворотному взаємодії та загальному перегляді в url. Чому це відбувається? Як використовувати загальні перегляди url у зворотному порядку?
Відповіді:
1 для відповіді № 1Проблема в тому, що ви дали ім'я categories
на загальний вигляд direct_to_template, і ви передаєте аргумент на цю точку зору - але direct_to_template не приймає цей аргумент, тільки словник, що містить додатковий контекст.
Якщо ви хочете передати додаткові аргументи на загальний вигляд, ви можете - але вони будуть передані тільки в Шаблон. Ти можеш розширити представлення написавши власну функцію, яка додає параметр до словника, а потім викликає загальний вигляд. Щось на зразок цього:
# views.py
from django.views.generic.simple import direct_to_template
def my_view(id):
more_data = {"id": id}
return direct_to_template(template = "basic.djhtml", more_data)
І тоді у твоїй urls.py
, замінити direct_to_template
з my_view
. З тих пір my_view
бере id
аргумент reverse
буде правильно відповідати, і аргумент буде переданий у загальний вигляд і до шаблону.
Мабуть, десь у вашому шаблоні є така рядок, як {{ id }}
.