在Django中包含自定义javascript的最佳实践
Best practice for including custom javascript in Django?
对Django来说还是个新手。我正在尝试将日历小部件合并到date
输入中,如本教程所示。下面的test.html工作正常:
{% extends "base_alt_simple.html" %} # note this has {% load static %}
{% block title %}Schedule{% endblock %}
{% block main_content %}
<div class="container">
<h3>Building name</h3>
</div>
<div class="container">
<div class="bootstrap-iso">
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-sm-6 col-xs-12">
<form method="post">
<div class="form-group ">
<label class="control-label " for="date">
Date
</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar">
</i>
</div>
<input class="form-control" id="date" name="date" placeholder="MM/DD/YYYY" type="text"/>
</div>
</div>
<div class="form-group">
<div>
<button class="btn btn-primary " name="submit" type="submit">
Submit
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
var date_input=$('input[name="date"]'); //our date input has the name "date"
var container=$('.bootstrap-iso form').length>0 ? $('.bootstrap-iso form').parent() : "body";
date_input.datepicker({
format: 'mm/dd/yyyy',
container: container,
todayHighlight: true,
autoclose: true,
})
})
</script>
但是,如果我想保持javascript在custom.js,我该如何加载这个?
对于最初的答案,我使用:
<script src="{% static 'custom.js' %}"></script>
但是日历弹出不再工作。我在这里显然误解了一些关于如何拉入custom.js
功能。谢谢你的建议。
, base_alt_simple.html :
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>{% block title %}Home{% endblock title %}</title>
<!-- Bootstrap core CSS -->
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
<!-- Custom Fonts -->
<link href="{% static 'css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Lora" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Abril+Fatface" rel="stylesheet">
<!-- Custom CSS -->
<link href="{% static 'css/grayscale.min.css' %}" rel="stylesheet">
<link href="{% static 'css/custom.css' %}" rel="stylesheet">
<!-- favicon -->
<link rel="shortcut icon" href="{% static 'images/favicon.ico' %}">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body id="page-top" data-spy="scroll" data-target=".navbar-fixed-top">
<!-- Static navbar -->
<nav class="navbar navbar-default navbar-static-top" style="background-color: #FFFFFF;">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand page-scroll" href="{% url 'index' %}">
<img id="logo" src="{% static 'images/Logo1.png' %}">
</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<!-- <ul class="nav navbar-nav navbar-right"> -->
<form method='GET' action='' class="nav navbar-nav navbar-right">
<input type='text' name='q' placeholder='Search apartments' value='{{ request.GET.q }}'/>
<input type='submit' value='Search' />
</form>
<!-- <li><a href="#">User <span class="glyphicon glyphicon-user" id="logIcon"></span></a></li> -->
<!-- <li><a href="#"> <span class="glyphicon glyphicon-home" id="logIcon"></span></a></li> -->
<!-- </ul> -->
</div><!--/.nav-collapse -->
</div>
</nav>
{% block main_content %}
{% endblock %}
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><'/script>')</script>
<script src="{% static 'bootstrap.min.js' %}"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="{% static 'ie10-viewport-bug-workaround.js' %}"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<!-- Include jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<!-- Bootstrap Date-Picker Plugin -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.1/js/bootstrap-datepicker.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.1/css/bootstrap-datepicker3.css"/>
</body>
</html>
编辑新增完整电流test.html
{% extends "base_alt_simple.html" %}
{% load static %}
{% block title %}Schedule{% endblock %}
{% block main_content %}
<div class="container">
<h3>Building name</h3>
</div>
<div class="container">
<div class="jumbotron">
<h4>Find a time to visit </h4>
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-6 col-xs-12">
<form method="post">
<div class="form-group ">
<label class="control-label " for="date">
Date
</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar">
</i>
</div>
<input class="form-control" id="date" name="date" placeholder="MM/DD/YYYY" type="text"/>
</div>
</div>
<div class="form-group">
<div>
<button class="btn btn-primary " name="submit" type="submit">
Submit
</button>
</div>
</div>
</form>
</div>
</div> <!-- row -->
</div> <!-- /container -->
</div> <!-- end jumbotron -->
</div> <!-- end container -->
{% endblock main_content %}
{% block scripts %}
<script src="{% static 'js/custom.js' %}"></script>
{% endblock scripts %}
你必须使用静态文件,按照这个django文档中的步骤操作。
假设你把yourscript.js
放在django app目录your_app/static/yourscript.js
中,你所要做的就是:
{% load static %}
<script src="{% static 'yourscript.js' %}"></script>
希望这对你有帮助!
更新:
确保custom.js
在 bootstrap和datepicker之后放置,这样你就可以将
<script src="{% static 'custom.js' %}"></script>
在base_alt_simple.html
的</body>
前面。或者,如果你不想把它放在那里,你可以定义一个脚本块:
{% block scripts %}
{% endblock %}
再次出现在base_alt_simple.html
和test.html
的</body>
前:
{% load static %}
{% block scripts %}
<script src="{% static 'custom.js' %}"></script>
{% endblock %}
另外,不要忘记将custom.js
放在your_app/static/custom.js
中并重新启动服务器。
Django以完全不同的方式将静态文件加载到模板中。你应该首先设置你的static
目录,然后使用Django的特殊templatetag从那里加载静态文件。如果你有你的js代码在yourscript.js
,在你的模板你会做以下的:
{% load static %}
<script src="{% static 'relative/path/from/static/dir/yourscript.js' %}"></script>
Django将静态文件收集到static
目录。为了获得更多关于如何在项目中设置静态目录的信息,请阅读关于静态文件的官方Django文档
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- javascript导入的最佳实践是什么
- 从数组中删除元素的最佳方法是:javascript/jquery
- 什么's是在javascript中迭代项的最佳方式
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- Javascript,用vars创建对象的最佳方法
- 最佳javascript/UI框架EXTJS vs HTML 5 vs其他框架
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- Javascript.连接两组对象的最佳方式,如SQL
- 在Javascript HTML5+Canvas中处理精灵鼠标点击的最佳方式
- 用于查找基于时间的事件的最佳Javascript算法
- 什么是可以创建和操作SVG的最佳javascript框架
- 地址号码的最佳javascript正则表达式
- 这是包装历史API的最佳JavaScript库
- 桌面应用程序的最佳JavaScript框架
- 创建 img 元素的最佳 JavaScript 代码是什么?