日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

哦,上下文变量

發(fā)布時(shí)間:2025/5/22 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哦,上下文变量 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

最近項(xiàng)目中遇到一個(gè)問(wèn)題:

有一個(gè)base.html,前臺(tái)頁(yè)面基本都會(huì)extends這個(gè)base.html

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

上下文變量不錯(cuò):

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,擴(kuò)展了Context,最主要的就是紅色的那兩句,

get_standard_processors()?

通過(guò)查看方法可以知道是獲取在settings文件中?每個(gè)要被執(zhí)行的處理器函數(shù)

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

一個(gè)請(qǐng)求進(jìn)來(lái)時(shí)的過(guò)程 ?url 找到 對(duì)應(yīng)的views, return (上下文變量就是在返回時(shí)對(duì)request做了一些事,主要就是返回一個(gè)字典,類似于return {
? ? ? ? 'user': user,
? ? ? ? 'perms': PermWrapper(user),
? ? }
然后我們?cè)谀0寰褪强梢允褂梅祷貋?lái)的值了),

方法一:只要我們?cè)趕ettings中TEMPLATE_CONTEXT_PROCESSORS定義了一個(gè)處理器,那我們使用RequestContext就不需要重復(fù)定義每個(gè)頁(yè)面都需要的變量了。缺點(diǎn)就是每個(gè)views都使用了定義的處理器,如果不想讓每個(gè)views都被處理那?

方法二:如果不是很多頁(yè)面公用變量,而只有一部分,只針對(duì)指定的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))

在獲取了一開(kāi)始初始settings設(shè)置的processor,同時(shí)也加入了我們自定義的一個(gè)處理器,這樣我們針對(duì)想要使用處理器的views單獨(dú)指定。


轉(zhuǎn)載于:https://my.oschina.net/012345678/blog/170351

總結(jié)

以上是生活随笔為你收集整理的哦,上下文变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。