簡體   English   中英

在Django HTML模板中包含一個簡單的函數

[英]Include a simple function inside Django HTML template

我目前有一個名為“ copyright”(動態版權信息)的函數,正嘗試將其包含在基本Django模板中,如下所示:

def copyright():
   some code
   some more code
   print(finaloutput)

我將其放在我的資產目錄中的我的modules / utils.py中,該目錄已在我的靜態目錄中注冊。

我希望能夠直接在主模板文件夾的頂級base.html中調用類似{{copyright}}的函數。

我已經嘗試了所有方法來確保我順利地加載了靜態文件。 我是否以錯誤的方式處理此問題?

不幸的是,您在這里所做的幾乎所有事情都是錯誤的。

這與靜態文件無關:正如您自己說的那樣,這是一個動態函數,因此從定義上來說不是靜態的。 無論如何,您不能將Python代碼放在​​資產目錄中。 最后,像這樣的任何函數將始終需要返回結果,而不是打印結果。

您需要的是模板標記,您可以將其放入應用程序的templatetags目錄中,並通過裝飾器進行注冊:

@register.simple_tag
def copyright():
   some code
   some more code
   return finaloutput

然后,將標記加載到模板中,並將其稱為標記,而不是變量:

{% load utils %}  # or whatever you called the file
...
{% copyright %}

請參閱模板標簽docs

有多種方法可以實現最終目標,但是您所做的任何事情都無法達到目標。

您可以,

  1. 使用模板標簽
  2. 以幾種不同的方式使用上下文處理器
  3. 如果您使用的是Django中基於類的通用視圖,請在模板中按{{ view.function_name }}使用{{ view.function_name }}

從我認為您設置的方式來看,最快的方法可能只是在視圖中傳遞一些上下文數據。

如果您使用的是功能視圖,則您的代碼可能如下所示:

def my_view(request):
    def copyright():
        return "copyright 2018"

    return render('my_template.html', {'copyright': copyright})

如果您使用的是基於類的通用視圖,則只需修改get_context_data

class Home(TemplateView):
    def get_context_data(self, *args, **kwargs):
        ctx = super(TemplateView, self).get_context_data(self, *args, **kwargs)
        ctx['copyright'] = self.copyright()
        return ctx

    def copyright(self):
        return "copyright 2018"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM