django资产定义允许在python代码中定义静态文件(javascript、css)的集合,并(重新)在django视图和模板中使用它们。
django-asset-definitions的Python项目详细描述
Django资产定义
资产定义是在python代码中定义的和在django视图中使用的静态文件(javascript、css)的集合。 和模板。
资产定义的一个例子是Media类,您可以 define in Django forms。
django-asset-definitionsaim将资产定义的应用扩展到表单之外,并将它们用作 描述和组织javascript和css文件的方法。
安装
pip install django-asset-definitions
使用量
定义:
importasset_definitionsmy_media=asset_definitions.Media(js=("media.js","""<script>window.addEventListener("load", function() {console.log("Loaded!");});</script>""",),css={"all":("media.css",),})
联合收割机:
extended_media=my_media+asset_definitions.Media(js=("extension.js",))
在视图中定义:
importasset_definitionsclassMyView(asset_definitions.MediaDefiningView,...):classMedia:js=("media.js",),css={"all":("media.css",),}...
将表单媒体添加到自动查看媒体:
importasset_definitionsfromdjango.views.genericimportFormViewclassMyFormView(asset_definitions.MediaDefiningView,FormView):...
在模板中使用:
{{view.media.render}}
或:
{{view.media.js.render}}{{view.media.css.render}}
请参阅下面的扩展示例。
asset_definitions.Media和django.forms.Media
- asset_definitions.Media提供的api与django.forms.Media相同。事实上,它是从 django.forms.Media。
- 将asset_definitions.Media与django.forms.Media结合使用是安全的。
- asset_definitions.Media对象是惰性的。如果组合了asset_definitions.Media的两个或多个实例 仅当呈现媒体时,计算结果。与一起使用reverse_lazy()是安全的 asset_definitions.Media。如果在模块级定义资产,这一点很重要。
- MediaDefiningView中的{tt1}$类不支持extend选项。添加到父级中定义的媒体 视图类应该重写get_media方法并使用super(MyView, self).get_media()。
示例:
myapp/urls.py:
urlpatterns=(url("/",MyView.as_view()),url("/global-variables.js",global_js_variables,name="global_js_variables"),)
myapp/views.py:
importasset_definitionsfrom.importassetsclassMyView(assets_definition.MediaDefiningView,TemplateView):template_name="template.html"classMedia:js=("media.js",)css={"all":("media.css",media)defget_media():return(assets.global_js_variables+assets.jquery+super(MyView,self).get_media())defglobal_js_variables(request):js_content='const CURRENT_USER="{}";'.format(request.user)returnHttpResponse(js_content,content_type="application/javascript")
myapp/assets.py:
importasset_definitionsfromdjango.coreimporturlresolversglobal_js_variables=asset_definition.Media(js=urlresolvers.reverse_lazy("global_js_variables"),)jquery=asset_definitions.Media(js="jquery.js")
myapp/templates/template.html:
<html> <head> {{view.media.css.render}} </head> <body> ... {{view.media.js.render}} </body> </html>
更改
0.3
- Add Django 2.0 compatibility
- Extract ^{tt23}$ base class from ^{tt15}$
0.2
- Specify different requirements in ^{tt25}$ based on the current Python version
- Allow to use inline JavaScript in media definitions (wrap with ^{tt26}$ tag)
0.1
- Initial release