Django - 在用户的个人资料中显示购买列表 - 包括来自其他应用程序列表的模板

时间:2017-09-02 23:15:41

标签: django django-models django-templates django-views paypal-subscriptions

我正在用Django做一个项目,我正在使用PayPal订阅。当您购买产品时,它会将详细信息保存在“购买”表中(顺便说一下,它会在数据库中写入购买3次,但这是另一个问题)。 现在,我正在尝试在用户的个人资料模板中显示购买列表。我有一个带有列表的购买模板,当我通过自己的URL看到它时,它可以工作,但每当我尝试在其他模板中显示它时,它只是空白。

这是我的结构:

  • 应用:帐户,产品,PayPal
  • 型号:用户(自定义),产品,购买
  • 模板:个人资料,产品,购买,paypal_return /取消,...
  • 观看次数:注册,登录,退出,all_products,paypal_return / cancel,...
  • templatetags / products_extra:paypal_form_for,现在是带有purchases_list的simple_tag(我还尝试过在products / views.py中查看)

我的问题是:

  1. 我应该购买不同的应用吗?

  2. 构建购买列表并在另一个应用中的模板中显示它的最佳方法是什么?我已阅读大量的帖子和文档,并试图将模板{%include ..%},simple_tags,模板继承,包含标签包括在内......但我无法使其工作。

  3. 以下是我现在的代码。

    提前谢谢!

    models.py

    class Purchase (models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='purchases')
        product = models.ForeignKey(Product)
        license_end = models.DateTimeField(default=timezone.now)
    

    templatetags / product_extras.py

    @register.simple_tag
    def purchases_list(request):
        purchases = Purchase.objects.all()
        return render(request, 'products/purchases.html', {'purchases': purchases})
    

    urls.py

        url(r'^purchases/$', product_extras.purchases_list, name='purchases'),
    

    purchases.html

        <p>PURCHASES</p>
            {% for purchase in purchases %}
                <p>{{purchase.id}}-{{ purchase.product }} - {{ purchase.license_end }}</p>
            {% endfor %}
    

    profile.html

        {% include "products/purchases.html" %}
    

2 个答案:

答案 0 :(得分:0)

在您的purchase.html中删除模板标记:

{% block purchasess %}{% endblock %}

答案 1 :(得分:0)

根据您的信息,我的问题解决方案是将您的个人资料视图更改为:

def profile(request):
    purchases = Purchases.objects.all()
    return render(request, 'account/profile.html', {'purchases':purchases})

当您在另一个模板中包含模板时,您必须认为它只是一个复制/粘贴操作。为了使其正确呈现,您必须提供适当的上下文变量,在本例中为purchases

此外,我相信您可能希望通过仅显示当前登录用户的购买来进一步改善您的视图。

编辑:

如果您想使用模板标签,可以查看inclusion tags。它们看起来非常适合您的用例。

我想不出使用模板继承的方法。继承更适合定义固定页眉和页脚的内容。