/ / Обръщане за генерични изгледи на url - django, django-urls

Обърнете се за генеричните изгледи на url - django, django-urls

Този въпрос е продължение на мисленето в тази тема, Отпаднах в проблем с обратното по родовогледки. Последният път мислех, че няма обратна връзка, защото използвах много от мнозина, сега нямам много взаимоотношения, но все още има проблем. Тъй като имам генеричен изглед в 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 }}.