У меня есть проблема, и, возможно, я могу привести пример двух представлений ниже того, чего я хочу достичь.
class SomeViewOne(TemplateView):
model = None
template_name = 'app/template1.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# The downloads view contains a list of countries eg France, Poland, Germany
# This returns to context and lists these countries in template1
class ItemDetail(TemplateView):
model = None
template_name = 'app/template2.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
countries_name = kwargs.get('str')
The view should get the passed "x" with the name of the country where I described it
below.
Затем на странице у меня есть список этих стран. После нажатия на выбранную страну должна открыться новая вкладка со списком городов в выбранной стране.
Итак, я использую в цикле template1.html, как показано ниже.
{% for x in list_countries %}
<li>
<a href = "{% url 'some-name-url' '{{x}}' %}" class = "target='_blank'">{{ x }}</a><br>
</li>
{% endfor %}
Я не могу передать "x" таким образом. Почему?
URL-адрес для следующего просмотра выглядит так
path('some/countries/<str:x>/',views.ItemDetail.as_view(), name='some-name-url'),
И я не могу получить этот «x», указанный в шаблоне в href
Вам не нужно передавать эту переменную с одинарными кавычками.
<a href = "{% url 'some-name-url' {{ x }} %}" #Just removed single quotes from variable x.
И посмотрите, отображается ли он в шаблоне
Если решение Manoj не работает, попробуйте удалить одинарные кавычки AND {{ }}. В моей программе мое целое число не нужно оборачивать {{ }}, так что, возможно, ваша строка тоже. У меня есть это в моем коде:
{% for item in items %}
<div class = "item-title">
{{ item }}<br>
</div>
<a href = "{% url 'core:edit_item' item.id %}">Edit {{ item }}</a>
{% endfor %}
Это работает просто отлично. Пытаться:
<a href = "{% url 'some-name-url' x %}" class = "target='_blank'">{{ x }}</a>
Есть несколько ошибок, таких как:
В теге URL должно быть только x, ни {{x}}, ни '{{x}}'
Вы передали значение как x в параметрах URL-адреса (some/countries/<str:x>/) и получили к нему доступ, используя kwargs.get('str'), что неверно, должно быть kwargs.get('x').
Также вы не включаете переменную countries_name в контекст и даже не возвращаете контекст.
Примечание. Предполагая, что вы уже получаете несколько компаний в шаблоне template1.html, поэтому вы запускаете цикл.
Попробуйте код ниже:
Просмотры.py
class ItemDetail(TemplateView):
template_name = 'template2.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['countries_name'] = self.kwargs.get('x')
return context
Файл Template1.html
{% for x in list_countries %}
<li>
<a onclick = "window.open('{% url 'some-name-url' x %}', '_blank')" style='cursor:pointer;'>{{ x }}</a><br>
</li>
{% endfor %}
Затем вы можете передать это значение countries_name из template1.html в template2.html.
Шаблон2.html
<p>The clicked country is {{countries_name}}</p>
@ Hide856 Также смотрите мой ответ ниже, он также будет работать для target=_blank, а также содержит некоторые исправления.