当我刷新页面时,django对象数据消失了

时间:2017-10-24 19:34:36

标签: django

当我第一次加载页面时,在我的计算机上启动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)

它可能非常简单,但却让我感到高兴。

感谢您的时间。

1 个答案:

答案 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)