0

我正在使用Django執行項目,並使用PayPal訂閱。當您購買產品時,會將詳細信息保存在「採購」表中(順便說一句,它會在數據庫中寫入購買3次,但這是另一個問題)。 現在我試圖在用戶的配置文件模板中顯示購買列表。我有一個包含列表的購買模板,當我通過自己的URL查看它時,它會起作用,但每當我嘗試在其他模板中顯示時,它都只是空白。Django - 顯示用戶個人資料中的購買列表 - 包含模板和其他應用程序中的列表

這是我的結構:

  • 應用:客戶,產品,貝寶
  • 模式:用戶(自定義),產品,購買
  • 模板:簡介,產品,採購,paypal_return /取消, ...
  • 瀏覽次數:註冊,登錄,註銷,ALL_PRODUCTS,paypal_return /取消,...
  • templatetags/products_extra:paypal_form_for,而現在一臺帶purchases_list simple_tag(我也嘗試只是一個觀點我ñ產品/ views.py)

而且我的問題是:

  1. 我應該有購買不同的應用程序?

  2. 構建採購清單並將其顯示在另一個應用程序的模板中的最佳方式是什麼?我已經閱讀了大量的文章和文檔,並嘗試將模板{%include ..%}與simple_tags一起使用,並帶有模板繼承,包含標籤......但我無法使其工作。

下面是我現在的代碼。

預先感謝您!

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" %} 
+0

purchases.html和profile.html繼承自哪些模板? –

+0

配置文件繼承自base.html(主要是網站的頁眉和頁腳),購買不從任何繼承。我嘗試過從配置文件繼承並創建{%block%},但無法使其工作 – Ire

+0

您能向我們展示用於繪製配置文件頁面的視圖代碼嗎?你必須在那裏設置購買變量和你想要呈現的內容。我不認爲自定義模板標籤在這種情況下是很好的解決方案。 –

回答

0

根據您的信息,我的解決問題的方法是將您的個人資料視圖改成這樣:

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

當您在另一個模板中包含模板時,您必須認爲它只是一個複製/粘貼操作。爲了正確渲染,你必須提供合適的上下文變量,在這種情況下,purchases

此外,我相信你可能想通過只顯示當前登錄用戶的購買進一步改善你的看法。

編輯:

如果你想使用的模板標籤來做到這一點,你可以看看inclusion tags。它們對您的使用情況來說似乎很完美

我想不出一種使用模板繼承的方法。繼承更適合於定義一個固定的頁眉和頁腳。

+0

這工作,並使總的意義。我能以這種方式傳遞多個上下文變量嗎?例如我還想在配置文件頁面中顯示該用戶的支持案例。 return request(request,'account/profile.html',{'purchases':purchases,'cases':cases}' 只是出於好奇,有沒有其他的方式來做到這一點(simple_tags,temp inheritance,... )或只有包含標記? 關於您的添加,當然,我當時只是試圖理解邏輯,所以我簡化了它:) 謝謝! – Ire

+0

您可以根據需要傳遞儘可能多的變量。你的例子是完全有效的。關於您的其他問題,請查看上面編輯的答案。 –

+0

謝謝,這很完美! 還有一件事。如果我只想顯示一個項目,例如最後的購買和我定義視圖/包含標籤爲: '高清spss_last_purchase(請求): last_purchase = Purchase.objects.last() 打印 「HOLA」 回報{ 'last_purchase':last_purchase}' 我如何顯示在模板中,如果我沒有for循環,因爲它是單個項目? 再次感謝! – Ire

0

在你purchases.html刪除的模板標籤:

{% block purchasess %}{% endblock %} 
+0

是的,對不起,那是從我嘗試模板繼承的時候開始的。我只是刪除它們,但仍然沒有顯示任何配置文件模板 – Ire

相關問題