[英]How can i get form data from django layouts (like 'base.html') without sending forms in all page through views?
[英]How can I send context to Django in every page without sending from all the views
我正在嘗試創建一個電子商務應用程序並在其中包含購物車選項。 但是,在網站的每個頁面(或每個視圖)上,我總是輸入代碼......
context = {
"no_in_cart":no_of_items_in_cart(request)
}
其中no_of_items_in_cart
是 function 以查找購物車中的商品數量。 但我覺得這是對代碼的浪費,可能有幾個低效率的地方。 而且我不確定如何通過auth_views
發送此代碼,例如登錄或注冊視圖。
任何幫助將不勝感激。 謝謝!
編輯內容
所以現在在我的 tag_name.py 我有代碼..
from django import template
register = template.Library()
@register.inclusion_tag("base.html")
def a_tag_name(request):
return {"no_in_cart":no_of_items_in_cart(request)}
def no_of_items_in_cart(request):
total = 0
for item in request.session.get('order'):
total += item["quantity"]
return (total)
在我的 base.html 中,我在頁面的最頂部有以下標簽......
{% load static %}
{% load tag_name %}
{% a_tag_name request %}
<!DOCTYPE html>
<html lang="en">
<head>
...
而且我不會在任何其他子模板中重復標簽{% load tag_name %}
或{% a_tag_name request %}
。
然而,這樣做,我被拋出一個錯誤......
Exception Type: AttributeError
Exception Value:'str' object has no attribute 'session'
它突出顯示了{% a_tag_name request %}
行。
關於如何解決這個問題的任何想法? 謝謝!
如果我正確理解您的問題。 您在許多頁面中顯示“no_in_cart”,每次呈現頁面時都必須傳遞此上下文變量。 您希望有一種方法可以在許多頁面中使用上下文變量(no_in_cart),但您不必每次都傳遞它。 這可以使用模板標簽來完成。 不確定它是否有效。 如果你願意,我可以提供一個示例代碼來處理模板標簽。
如下所述創建文件:-
Appdirectory
templatetags
__init__.py
tag_name.py
models.py
views.py
在 tag_name.py 中:-
from django import template
register = template.Library()
@register.inclusion_tag("condition.html")
def a_tag_name(request):
return {"no_in_cart":no_of_items_in_cart(request)}
然后在條件下。html:-
# some django template code(html) if required
{{no_in_cart}}
然后最后在您要使用它的頁面中。 在頂部首先加載標簽
{% load tag_name %}
然后把這個放在想要的地方{% a_tag_name request %}
文件的位置應與指定的一樣。 您可以重命名除模板標簽之外的所有內容。 同時運行 manage.py collectstatic。 希望能幫助到你。
如果您想了解有關標簽的更多信息,請參閱:- https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/
https://medium.com/@hiteshgarg14/creating-custom-template-tags-in-django-application-7bd1dcfeb144
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.