将变量传递给href django模板

envsm3lx  于 2022-11-18  发布在  Go
关注(0)|答案(3)|浏览(146)

我有一些问题,也许我可以给予一个例子,下面两个观点我想达到的。

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'),

我无法在href中获取模板中给定的“x”

gopyfrb3

gopyfrb31#

如果Manoj的解决方案不起作用,试着去掉单引号AND {{ }}。在我的程序中,我的整数不需要用{{ }} Package ,所以你的字符串也不需要。我在代码中有这样的代码:

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

omqzjyyz2#

您不需要用单引号传递该变量。

<a href="{% url 'some-name-url' {{ x }} %}" #Just removed single quotes from variable x.

看看它是否显示在模板上

vlju58qv

vlju58qv3#

有几种错误如:

  1. URL标记中只能是x,既不能是{{x}},也不能是'{{x}}'
    1.您在url参数(some/countries/<str:x>/)中将值作为x传递,并使用kwargs.get('str')访问它,这是不正确的,它应该是kwargs.get('x')
    1.此外,您没有在上下文中包括变量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

模板1.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文件。
template2.html

<p>The clicked country is {{countries_name}}</p>

相关问题