日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哦,上下文变量

發布時間:2025/5/22 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哦,上下文变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

最近項目中遇到一個問題:

有一個base.html,前臺頁面基本都會extends這個base.html

base.html頁面內有兩個變量,需要views傳入。要是有個幾百個繼承base.html的頁面,每個頁面需要一個views,那得是都大的工作量。

上下文變量不錯:

RequestContext?

class RequestContext(Context):
? ? """
? ? This subclass of template.Context automatically populates itself using
? ? the processors defined in TEMPLATE_CONTEXT_PROCESSORS.
? ? Additional processors can be specified as a list of callables
? ? using the "processors" keyword argument.
? ? """
? ? def __init__(self, request, dict_=None, processors=None, current_app=None,
? ? ? ? ? ? use_l10n=None, use_tz=None):
? ? ? ? Context.__init__(self, dict_, current_app=current_app,
? ? ? ? ? ? ? ? use_l10n=use_l10n, use_tz=use_tz)
? ? ? ? if processors is None:
? ? ? ? ? ? processors = ()
? ? ? ? else:
? ? ? ? ? ? processors = tuple(processors)
? ? ? ? for processor in get_standard_processors() + processors:
? ? ? ? ? ? self.update(processor(request))


RequestContext繼承了Context,擴展了Context,最主要的就是紅色的那兩句,

get_standard_processors()?

通過查看方法可以知道是獲取在settings文件中?每個要被執行的處理器函數

TEMPLATE_CONTEXT_PROCESSORS = (
? ? "django.contrib.auth.context_processors.auth",
? ? "django.core.context_processors.debug",
? ? "django.core.context_processors.request",
? ? "django.core.context_processors.media",
)

一個請求進來時的過程 ?url 找到 對應的views, return (上下文變量就是在返回時對request做了一些事,主要就是返回一個字典,類似于return {
? ? ? ? 'user': user,
? ? ? ? 'perms': PermWrapper(user),
? ? }
然后我們在模板就是可以使用返回來的值了),

方法一:只要我們在settings中TEMPLATE_CONTEXT_PROCESSORS定義了一個處理器,那我們使用RequestContext就不需要重復定義每個頁面都需要的變量了。缺點就是每個views都使用了定義的處理器,如果不想讓每個views都被處理那?

方法二:如果不是很多頁面公用變量,而只有一部分,只針對指定的views使用指定的處理器

return ?render_to_response(template_name,extra_context,context_instance=RequestContext(request,processors=[xxxxx]))

原理就是for processor in get_standard_processors() + processors:
? ? ? ? ? ??self.update(processor(request))

在獲取了一開始初始settings設置的processor,同時也加入了我們自定義的一個處理器,這樣我們針對想要使用處理器的views單獨指定。


轉載于:https://my.oschina.net/012345678/blog/170351

總結

以上是生活随笔為你收集整理的哦,上下文变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。