当我第一次加载页面时,在我的计算机上启动runserver之后,对象数据就在那里(下面的例子中有三个链接)。如果我重新加载对象数据不再存在(在下面的示例中为零链接)。
{% for url in urls %}
<a href="{{ url }}">
link
</a>
{% endfor %}
class IntroView(View):
template_name = '[app_name]/template.html'
model_names = ['shoe', 'hat', 'bag']
urls = [reverse_lazy('%s:%s' % ('[app_name]', name)) for name in model_names]
dict_to_template = {'urls': urls}
def get(self, request, *args, **kwargs):
return render(request, self.template_name, context=self.dict_to_template)
它可能非常简单,但却让我感到高兴。
感谢您的时间。
答案 0 :(得分:1)
我不认为你的例子可以解释你所看到的行为。
如果使用生成器表达式而不是列表推导,那么您将得到该错误,因为第一次运行视图时将使用生成器。
class IntroView(View):
template_name = '[app_name]/template.html'
model_names = ['shoe', 'hat', 'bag']
urls = (reverse_lazy('%s:%s' % ('[app_name]', name)) for name in model_names)
dict_to_template = {'urls': urls}
def get(self, request, *args, **kwargs):
return render(request, self.template_name, context=self.dict_to_template)
您可以通过将代码移动到get()
方法来避免此问题,以便每次运行视图时都会运行。
class IntroView(View):
template_name = '[app_name]/template.html'
model_names = ['shoe', 'hat', 'bag']
def get(self, request, *args, **kwargs):
urls = (reverse_lazy('%s:%s' % ('[app_name]', name)) for name in model_names)
dict_to_template = {'urls': urls}
return render(request, self.template_name, context=dict_to_template)