Django:在基于类的视图中包含媒体(css/js)

Django:在基于类的视图中包含媒体(css/js),django,django-class-based-views,django-media,Django,Django Class Based Views,Django Media,我正在将旧的django代码从基于方法的视图更新为基于类的视图 我知道如何通过 如果基于类的视图不包含任何表单,如何使用媒体类?就是为了: 以下是他们文档中的示例: {% load sekizai_tags %} <html> <head> {% render_block "css" %} </head> <body> Your content comes here. Maybe you want to throw in some css: {%

我正在将旧的django代码从基于方法的视图更新为基于类的视图

我知道如何通过

如果基于类的视图不包含任何表单,如何使用媒体类?

就是为了:

以下是他们文档中的示例:

{% load sekizai_tags %}

<html>
<head>
{% render_block "css" %}
</head>
<body>
Your content comes here.
Maybe you want to throw in some css:
{% addtoblock "css" %}
<link href="/media/css/stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
{% endaddtoblock %}
Some more content here.
{% addtoblock "js" %}
<script type="text/javascript">
alert("Hello django-sekizai");
</script>
{% endaddtoblock %}
And even more content.
{% render_block "js" %}
</body>
</html>
本例在一个模板中显示了所有内容,但是-当然-您可以通过继承或包含将其拆分为多个模板,并在任何部分模板中使用addtoblock指令

还有一个更复杂的现实例子。

就是为了这个:

以下是他们文档中的示例:

{% load sekizai_tags %}

<html>
<head>
{% render_block "css" %}
</head>
<body>
Your content comes here.
Maybe you want to throw in some css:
{% addtoblock "css" %}
<link href="/media/css/stylesheet.css" media="screen" rel="stylesheet" type="text/css" />
{% endaddtoblock %}
Some more content here.
{% addtoblock "js" %}
<script type="text/javascript">
alert("Hello django-sekizai");
</script>
{% endaddtoblock %}
And even more content.
{% render_block "js" %}
</body>
</html>
本例在一个模板中显示了所有内容,但是-当然-您可以通过继承或包含将其拆分为多个模板,并在任何部分模板中使用addtoblock指令


还有一个更复杂的实际示例。

这里有一个小的mixin类,可以帮助您将媒体添加到基于CreateView、UpdateView和DeleteView的视图中:

例如:

class CreateFooView(InjectFormMediaMixin, CreateView):
    model = models.Foo
    fields = (
        'name',
    )

    class Media:
        css = {
            'all': ('pretty.css',)
        }
        js = ('animations.js', 'actions.js')

下面是一个小的mixin类,它可以帮助您将媒体添加到基于CreateView、UpdateView和DeleteView的视图中:

例如:

class CreateFooView(InjectFormMediaMixin, CreateView):
    model = models.Foo
    fields = (
        'name',
    )

    class Media:
        css = {
            'all': ('pretty.css',)
        }
        js = ('animations.js', 'actions.js')

CSS/JS通常在模板本身而不是视图中进行管理。看

例如,使用base.html:

<!DOCTYPE html>
<html>
    <head>

        <title>
            {% block page_title %}{{ page_title }}{% endblock %}
        </title>

        {% block css %}
        {% endblock %}

    </head>
    <body>

        {% block main %}
        {% endblock %}

        {% block scripts %}
        {% endblock %}

    </body>
</html>
并使用my_page.html扩展它:

{% extends "base.html" %}
{% load staticfiles %}

{% block page_title %}
Hello!
{% endblock %}

{% block css %}
    <link href="{% static "page.css" %}" rel="stylesheet"/>
{% endblock %}

{% block main %}
Yo!
{% endblock %}

{% block scripts %}
    <script src="{% static 'my_scripts.js' %}"></script>
{% endblock %}

CSS/JS通常在模板本身而不是视图中进行管理。看

例如,使用base.html:

<!DOCTYPE html>
<html>
    <head>

        <title>
            {% block page_title %}{{ page_title }}{% endblock %}
        </title>

        {% block css %}
        {% endblock %}

    </head>
    <body>

        {% block main %}
        {% endblock %}

        {% block scripts %}
        {% endblock %}

    </body>
</html>
并使用my_page.html扩展它:

{% extends "base.html" %}
{% load staticfiles %}

{% block page_title %}
Hello!
{% endblock %}

{% block css %}
    <link href="{% static "page.css" %}" rel="stylesheet"/>
{% endblock %}

{% block main %}
Yo!
{% endblock %}

{% block scripts %}
    <script src="{% static 'my_scripts.js' %}"></script>
{% endblock %}


如果静态文件与任何表单都不相关,那么只需将它们放在您的CBV所在的HTML模板中即可using@v1k45我的模板没有呈现整个页面。只是一个片段。AFAIK js includes应该在中。我不知道如何在我的模板中包含JS文件,因为我希望包含在中。您可以通过扩展基本模板文件,然后在头部{%block%}中添加JS文件来覆盖/扩展头部标记中的代码。您的表单是如何生成的?@Udi视图中没有表单。我更新了措辞,也许现在更清楚了,我不是一个母语为英语的人。如果静态文件与任何表单都不相关,那么就把它们放在你的CBV所在的HTML模板中using@v1k45我的模板没有呈现整个页面。只是一个片段。AFAIK js includes应该在中。我不知道如何在我的模板中包含JS文件,因为我希望包含在中。您可以通过扩展基本模板文件,然后在头部{%block%}中添加JS文件来覆盖/扩展头部标记中的代码。您的表单是如何生成的?@Udi视图中没有表单。我更新了措辞,也许现在更清楚了,我不是母语人士。我的观点不是CreateView的子类。我猜get_form_类不会被调用。但我不确定。请添加您的视图类,或尝试查找表单的创建位置。我的视图中没有表单。看看about示例。好了,没有涉及表单:我的视图不是CreateView的子类。我猜get_form_类不会被调用。但我不确定。请添加您的视图类,或尝试查找表单的创建位置。我的视图中没有表单。看看about示例。AFAIK没有涉及表格:你能提供一个例子吗?你提到的文件显示了这一点。但是如何在我的模板使用继承的页面顶部添加CSS/JS呢?谢谢你的例子。如果我写了一个可重用的应用程序。我是否可以确保应用程序未提供但项目始终提供的基本模板具有块css和脚本?不,您不能:-我认为这是一个重大问题。或者我遗漏了什么,有什么问题吗?您的可重用应用程序的用户必须遵循一些关于如何将其集成到模板中的说明?这一点也不少见,我不认为这是你需要担心的事情@udi的答案是可靠的。同样,对于可能实现可重用应用程序的潜在最终用户来说,这些都是非常合理的要求。您可能唯一需要担心的是确保在文档中为最终用户提供足够的示例。您能提供一个示例吗?你提到的文件显示了这一点。但是如何在我的模板使用继承的页面顶部添加CSS/JS呢?谢谢你的例子。如果我写了一个可重用的应用程序。我是否可以确保应用程序未提供但项目始终提供的基本模板具有块css和脚本?不,您不能:-我认为这是一个重大问题。或者我遗漏了什么,有什么问题吗?您的可重用应用程序的用户必须遵循一些关于如何将其集成到模板中的说明?这一点也不少见,我不认为这是你需要担心的事情@udi的答案是可靠的。同样,对于可能实现您的可重用应用程序的潜在最终用户来说,这些都是非常合理的要求 . 您可能唯一需要担心的是确保在文档中为最终用户提供足够的示例。