jQuery 未在 Django 管理主页/仪表板、登录和注销页面中加载

Posted

技术标签:

【中文标题】jQuery 未在 Django 管理主页/仪表板、登录和注销页面中加载【英文标题】:jQuery not loading in Django admin homepage/dashboard, login and logout pages 【发布时间】:2019-07-05 16:52:19 【问题描述】:

我需要通过所有 django 管理页面加载一个 js 文件。因此,我复制了位于django/contrib/admin/templates/admin/ 中的base.html 文件并将其添加到templates/admin/base.html 下的模板文件夹中。在app_static/admin/js/(我的静态文件的位置)下添加了js 文件。

接下来,我将<script> 标签包含在base.html% block javascripts % 标签下。 当我打开change_listchange_form 页面时,js 会正确触发。它不会在主页/仪表板、登录和注销页面中触发。返回声明 Uncaught ReferenceError: django is not defined 的错误。 jQuery 未初始化时通常会抛出错误。

session_expiry.js

(function($)

    console.log('js has been called');

)(django.jQuery);

base.html

% load i18n static %<!DOCTYPE html>
% get_current_language as LANGUAGE_CODE %% get_current_language_bidi as LANGUAGE_BIDI %
<html lang=" LANGUAGE_CODE|default:"en-us" " % if LANGUAGE_BIDI %dir="rtl"% endif %>

    <head>
        <title>% block title %% endblock %</title>
        <link rel="stylesheet" type="text/css" href="% block stylesheet %% static "admin/css/base.css" %% endblock %">
        % block extrastyle %% endblock %
        % if LANGUAGE_BIDI %<link rel="stylesheet" type="text/css" href="% block stylesheet_rtl %% static "admin/css/rtl.css" %% endblock %">% endif %
        % block extrahead %% endblock %
        % block responsive %
        <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
        <link rel="stylesheet" type="text/css" href="% static "admin/css/responsive.css" %">
        % if LANGUAGE_BIDI %<link rel="stylesheet" type="text/css" href="% static "admin/css/responsive_rtl.css" %">% endif %
        % endblock %

        % block javascripts %
            <script type="text/javascript" src="% static "admin/js/session_expiry.js" %"></script>
        % endblock %

        % block blockbots %<meta name="robots" content="NONE,NOARCHIVE">% endblock %
    </head>
    % load i18n %

    <body class="% if is_popup %popup % endif %% block bodyclass %% endblock %" data-admin-utc-offset="% now "Z" %">
        <!-- Container -->
        <div id="container">
            % if not is_popup %
            <!-- Header -->
            <div id="header">
                <div id="branding">% block branding %% endblock %</div>
                % block usertools %
                    % if has_permission %
                        <div id="user-tools">
                            % block welcome-msg %
                                % trans 'Welcome,' %
                                <strong>% firstof user.get_short_name user.get_username %</strong>.
                            % endblock %
                            % block userlinks %
                                % if site_url %
                                    <a href=" site_url ">% trans 'View site' %</a> /
                                % endif %
                                % if user.is_active and user.is_staff %
                                    % url 'django-admindocs-docroot' as docsroot %
                                    % if docsroot %
                                        <a href=" docsroot ">% trans 'Documentation' %</a> /
                                    % endif %
                                % endif %
                                % if user.has_usable_password %
                                    <a href="% url 'admin:password_change' %">% trans 'Change password' %</a> /
                                % endif %
                                <a href="% url 'admin:logout' %">% trans 'Log out' %</a>
                            % endblock %
                        </div>
                    % endif %
                % endblock %
                % block nav-global %% endblock %
            </div>
            <!-- END Header -->

            % block breadcrumbs %
                <div class="breadcrumbs">
                <a href="% url 'admin:index' %">% trans 'Home' %</a>
                % if title % &rsaquo;  title % endif %
                </div>
            % endblock %

            % endif %

            % block messages %
                % if messages %
                    <ul class="messagelist">% for message in messages %
                    <li% if message.tags % class=" message.tags "% endif %> message|capfirst </li>
                    % endfor %</ul>
                % endif %
            % endblock messages %

            <!-- Content -->
            <div id="content" class="% block coltype %colM% endblock %">
            % block pretitle %% endblock %
            % block content_title %% if title %<h1> title </h1>% endif %% endblock %
            % block content %
            % block object-tools %% endblock %
             content 
            % endblock %
            % block sidebar %% endblock %
            <br class="clear">
            </div>
            <!-- END Content -->

            % block footer %<div id="footer"></div>% endblock %

        </div>
        <!-- END Container -->

    </body>
</html>

谁能指出我可能遗漏了什么。我正在使用 Django 2.1.2。

【问题讨论】:

能否包含您的 base.html 文件? @ManzurulHoqueRumi 添加了 base.html。在包含脚本的块下进行了细微的更改。还是没有运气 【参考方案1】:

django.jQuerydjango/contrib/admin/static/admin/js/jquery.init.js 中定义并位于django/contrib/admin/static/admin/js/jquery.js。你需要直接在你的模板中加载那些js文件

<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>

【讨论】:

如果不包含这些脚本,jQuery 会在change_listchange_form 页面中正确加载。再次在base.html 中明确包含这些内容现在在change_listchange_form 页面中加载jquery.jsjquery.init.js 两次,这似乎不正确。我认为我们在这里遗漏了一些其他细节。

以上是关于jQuery 未在 Django 管理主页/仪表板、登录和注销页面中加载的主要内容,如果未能解决你的问题,请参考以下文章

Hystrix仪表板主页加载jquery失败

jquery 事件按钮显示正确的响应,但视图未在 django 中正确呈现

Jquery 对话框未在 aspnet MVC 中加载

WordPress/Avada 网站未在 XAMPP 中加载

Django xadmin 使用

管理类未在 django 中定义