Передача переменной в шаблон 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" таким образом. Почему?

URL-адрес для следующего просмотра выглядит так

path('some/countries/<str:x>/',views.ItemDetail.as_view(), name='some-name-url'),

И я не могу получить этот «x», указанный в шаблоне в href

Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
1
0
273
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам не нужно передавать эту переменную с одинарными кавычками.

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

@ Hide856 Также смотрите мой ответ ниже, он также будет работать для target=_blank, а также содержит некоторые исправления.

Sunderam Dubey 18.11.2022 13:12

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

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

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

  3. Также вы не включаете переменную 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>

Другие вопросы по теме