Django模板中Pregunta的textopregunta字段无法渲染问题求助
问题排查与解决方案
嘿,我来帮你搞定这个数据渲染的问题!咱们一步步来分析:
1. 模板循环变量匹配错误(最直接原因)
你在模板里写了{% for test in lista %},但循环体内却用了{{ pregunta.textopregunta }}——这里的循环变量是test,不是pregunta啊!模板找不到pregunta这个变量,自然只会显示“Pregunta:”,后面的内容是空的。
修正后的模板代码:
{% for test in lista %} <br/> <p>Pregunta: {{ test.textopregunta }}</p> {% endfor %}
2. 视图类使用错误
你用了DetailView,但这个视图类是用来展示单个模型对象详情的,而你想要渲染的是Pregunta的列表数据。DetailView会把单个对象传递给模板(即使你设置了context_object_name='lista'),这就导致模板里的循环其实是在遍历单个对象的属性,根本不是你想要的列表集合。
应该换成ListView,它专门用来处理列表数据展示:
修正后的View.py代码:
class TestDetail(generic.ListView): model = Pregunta context_object_name = 'lista' def get_queryset(self): # 获取URL中的tipo参数 tipo = self.kwargs.get('tipo') # 根据tipo过滤关联的Test(这里假设Test模型有一个叫tipo的字段,记得根据你的实际模型调整) return Pregunta.objects.filter(test__tipo=tipo)
3. 补充:URL参数的过滤逻辑
你的URL里有(?P<tipo>.+)参数,但原来的get_queryset只是返回所有Pregunta,没有根据这个参数过滤数据。上面的修正代码里加上了过滤逻辑,这样就能只返回对应类型的Test下的Pregunta数据,符合你的URL设计意图。如果你的Test模型里类型字段不是tipo,记得改成实际的字段名(比如name、category等)。
这样调整之后,应该就能正常渲染出Pregunta的textopregunta内容啦!
内容的提问来源于stack exchange,提问作者DRapLow
相关产品推荐
相关产品推荐

