/ / django шаблон за импортиране на маркери за URL адреси има ли по-добър начин? - django, django-шаблони

django шаблон за импортиране на URL адреси Има ли по-добър начин? - django, django-шаблони

Целта ми е да изложа няколко линка на страница и се чудех дали няма по-добър начин да направите този ред на кода:

<a href={% url ""|add:app_name|add:":"|add:model_name|add:post_fix %}> {{ model_name }} </a>

Тази част : "" | Добави: app_name | добави: ":" | добави: MODEL_NAME | добави: post_fix

- Ако е така, какъв е недостатъкът ми в мисленето ми, дали е името на URL адреса или дали се прави прекалено много в шаблона или нещо друго? Трябва ли да направя конструкцията в питън код в view.py, ако е така, можеш ли да ми покажеш как ще се справиш с този проблем?

{% for model_name in list_model_names%}
....
<a href={% url ""|add:app_name|add:":"|add:model_name|add:post_fix %}> {{ model_name }} </a>
....
{% endfor %}

url.py

from django.conf.urls import url

from . import views

app_name = "app"
urlpatterns = [
url(r"^stone/$, view.....as_view(), name="stone_index"),
url(r"^cloud/$", view.....as_view(), name="cloud_index"),
]

views.py

from django.shortcuts import render_to_response
from django.views import View
from app.models import (Stone, Cloud)
class ThisView(View):
template_name = "app/a_template.html"
models = [Stone, Cloud]
model_names = [model._meta.model_name for model in models]
app_name = "app"
post_fix = "_index"

dict_to_template = {"app_name": app_name,
"list_model_name": model_names,
"post_fix": post_fix}

def get(self, *args, **kwargs):
return render_to_response(self.template_name, self.dict_to_template)

Благодарим ви за вашето време.

Отговори:

1 за отговор № 1

Би било по-добре да обръщате URL адресите в шаблона

from django.urls import reverse . # Django 1.9+
# from django.core.urlresolvers import reverse # Django < 1.9

model_names = [model._meta.model_name for model in models]
app_name = "app"
post_fix = "_index"
urls = [reverse("%s:%s%s" % (app_name, model, post_fix)) for model in model_names

След това zip имената на моделите и URL адресите заедно и ги включете в контекста на шаблона:

models_and_urls = zip(model_names, urls)
dict_to_template = {"models_and_urls: models_and_urls}

След това можете да пресечете имената и URL адресите на моделите във вашия шаблон.

{% for model_name, url in models_and_urls %}
....
<a href="{{ url }}"> {{ model_name }} </a>
....
{% endfor %}