Передача переменной в шаблон href django

У меня есть некоторая проблема, и, возможно, я могу привести пример двух видов ниже того, чего я хочу достичь.

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" таким образом. Почему?

Урл для следующего просмотра выглядит следующим образом

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.

И посмотрите, отображается ли он на шаблоне

Если решение Маноджа не работает, попробуйте убрать одинарные кавычки и {{ }}. В моей программе целое число не нужно обертывать {{ }}, так что, возможно, и ваша строка тоже. В моем коде есть следующее:

{% 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>

Есть несколько ошибок, таких как:

  1. В теге url должно быть только x ни {{x}}, ни '{{x}}'

    .
  2. Вы передали значение как x в url params (some/countries/<str:x>/) и обращаетесь к нему с помощью kwargs.get('str'), что неправильно, должно быть kwargs.get('x').

  3. Также вы не включаете переменную countries_name в контекст и даже не возвращаете контекст.

Примечание: Предполагается, что вы уже получаете некоторые компании в шаблоне template1.html, поэтому вы запускаете цикл.

Попробуйте следующий код:

views.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 %}

В настоящее время вы можете использовать это переданное значение из файла template1.html в файл template2.html с помощью {{countries_name}}.

template2.html

<p>The clicked country is {{countries_name}}</p>
Вернуться на верх