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_list
和change_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 % › 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.jQuery
在django/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_list
和change_form
页面中正确加载。再次在base.html
中明确包含这些内容现在在change_list
和change_form
页面中加载jquery.js
和jquery.init.js
两次,这似乎不正确。我认为我们在这里遗漏了一些其他细节。以上是关于jQuery 未在 Django 管理主页/仪表板、登录和注销页面中加载的主要内容,如果未能解决你的问题,请参考以下文章
jquery 事件按钮显示正确的响应,但视图未在 django 中正确呈现