【问题标题】:Django Template Page Outputting NothingDjango模板页面无输出
【发布时间】:2013-10-15 03:47:20
【问题描述】:

谁能帮我弄清楚为什么我的 Django 模板页面不会呈现任何内容?

我正在使用 Python 请求 (http://docs.python-requests.org/en/latest/) 从外部 URL 检索 JSON 数据。我使用 .json() 解码数据。当从命令行执行它时,这正如我所期望的那样工作,但是当它在视图中什么都不做时。

当我运行服务器时,页面是空白的。它没有标题,没有打印“测试”,什么都没有。

我的模板:

<html>
<head><title>Offer List</title></head>

<body>
<p>Testing</p>
{% load dictparser %}
{% for offers in network1_offers %}
{% autoescape off %}
    <div>
        <p>name: {{ offers|lookup:"name" }}</p>
        <p>pay: {{ offers|lookup:"payout" }}</p>
        <p>description: {{ offers|lookup:"description" }}</p>
    </div>
{% empty %}
    <li>Sorry, no surveys available.</li>
{% endautoescape %}
{% endfor %}

</body>
</html>

我的观点:

class OffersList(View):
    template_name="generic_app/offers.html"
    def load_offers(request):
        """
        import example network offers.

        """
        user = request.user
        user_agent = request.META['HTTP_USER_AGENT']
        amparams = {'user_subid':user.sub_id, 'useragent':user_agent, 'user_ip':user.ip_address}
        examplenetwork = requests.get('http://example.com/api-get.php?pubid=00000&key=000000000000&mode=offers&incent=1', data=amparams)
        exampleoffers= examplenetwork.json()
        """
        import example network 2 offers.

        """
        clparams = {'subid':user.sub_id, 'ua':user_agent, 'geoip':user.ip_address}
        examplenetwork2 = requests.get('http://www.examplenetwork2.com/blahblah', data=clparams)
        exampleoffers2 = examplenetwork2.json()
        render(request, 'generic_app/offers.html', {'network1_offers':exampleoffers, 'network2_offers':exampleoffers2})

网址:

url(r'^dashboard/offers$', OffersList.as_view(), name="offers"),

【问题讨论】:

    标签: python django json templates view


    【解决方案1】:

    您看到这个是因为您还没有定义如何在您的视图中访问 load_offers() 方法,目前您的 load_offers() 方法只是在您的类中浮动的方法。

    使用基类View自带了你需要实现的方法,例如

    class OfferView(View):
    
        template_name = "generic_app/offers.html"
    
        def get(self, request, *args, **kwargs):
            return load_offers(request)
    

    或者更好地将其更改为TemplateView(因为它确实是这样)。

    class OfferView(TemplateView): 
    
        template_name = "generic_app/offers.html"
    
        def get_context_data(self, **kwargs):
            context = super(OfferView, self).get_context_data(**kwargs)
            context['offers'] = load_offers(self.request)
            return context
    

    【讨论】:

    • 感谢您为我指明正确的方向。我无法在您的第二个示例中使用 request (load_offers(request)
    • 您可以通过self.request 访问它 - 因为我忘记添加它所以更新了到期答案。
    • 完美。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 2012-10-02
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多