Django模板中{% url %}标签传递变量至href失败的问题排查
问题原因及解决方法
核心错误
你在模板的url标签里错误地用{{x}}包裹了变量,Django模板标签内部直接使用变量名即可,不需要额外的模板变量语法。另外a标签的属性写法也有问题,target='_blank'不该放在class属性里。
修正步骤
1. 修正模板中的URL生成代码
把模板里的a标签代码改成这样:
{% for x in list_countries %} <li> <a href="{% url 'some-name-url' x %}" target="_blank">{{ x }}</a><br> </li> {% endfor %}
- 去掉
url标签里的{{}},直接传入变量x - 把
target='_blank'从class属性中分离出来,作为独立的HTML属性
2. 修正视图中获取参数的代码
ItemDetail视图里,你需要从kwargs中获取名为x的参数,而不是'str':
class ItemDetail(TemplateView): model = None template_name = 'app/template2.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 从kwargs中获取URL路径里的x参数 countries_name = kwargs.get('x') # 后续可以用countries_name做逻辑处理,比如获取对应城市列表 return context
3. 验证上下文传递(可选)
确保SomeViewOne视图正确把国家列表传入模板上下文,比如补充代码:
class SomeViewOne(TemplateView): model = None template_name = 'app/template1.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 假设这里是你的国家列表数据 context['list_countries'] = ['法国', '波兰', '德国'] return context
这样修改后,点击国家名称就能正确跳转到对应URL,ItemDetail视图也能获取到传递的国家名称变量了。
内容的提问来源于stack exchange,提问作者Hide856
相关产品推荐
相关产品推荐

