Целта ми е да изложа няколко линка на страница и се чудех дали няма по-добър начин да направите този ред на кода:
<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 %}