我正在与Django开发一个项目。 我有一个HTML网页,其中包含带有日期字段的表单。 我希望Javascript在用户登陆该网页后立即用今天的日期进行编译,以便他/她获得一种“默认日期”。
我的html页面(templates / aggiungi_terminologia.html)中有日期字段:
<div class="form-group">
<label for="glossary_entry_input_21">Data di inserimento della terminologia</label>
<small id="inputHelp" class="form-text text-muted">Compilare solo se è nota la data di pubblicazione del documento fonte, altrimenti inserire la data di oggi.</small>
<input name="Data_inserimento_entry" type="date" value="01/01/1900" class="form-control" id="date_to_turn_into_today" placeholder="">
</div>
,然后在表单末尾进行javascript调用:
{% load static %}
<script> src="{% static 'get_today_date.js' %}"</script>
然后,在我的javascript函数内(static / js / get_today_date.js):
var today = moment().format('DD/MM/YYYY');
document.getElementById("date_to_turn_into_today").value = today;
由于我使用的是moment.js,因此我在 settings.py > INSTALLED_APPS
中添加了“ moment”安装后,我将在控制台上运行:
pip install django-staticfiles-moment
但是,当我运行服务器时,我在该字段上看到的只是:
我的控制台返回:
警告:app_glossario.glossary_entry.Data_inserimento_entry: (fields.W161)提供了固定的默认值。 提示:您似乎将此字段的默认日期/时间/日期时间设置为默认值。这可能不是您想要的。如果你想 将当前日期设为默认日期,请使用
django.utils.timezone.now
为什么javascript不替换日期? 我该如何运作? 注意:问题在于js,html和django之间的连接
答案 0 :(得分:1)
继续评论是否重复,看看:
var now = new Date();
var day = ("0" + now.getDate()).slice(-2);
var month = ("0" + (now.getMonth() + 1)).slice(-2);
var today = now.getFullYear()+"-"+(month)+"-"+(day);
document.getElementById('inputDate').value = today;
<input type="date" id="inputDate" />
请同时检查this。
答案 1 :(得分:1)
当我提供格式错误的日期字符串时,我看到了类似的行为(输入字段显示日期占位符而不是所需的日期)。输入元素似乎需要类似yyyy-mm-dd
的格式。
这是使用香草JS的非常直观的解决方案。 input
元素的默认值为日期(特定于区域设置)。
(您可能需要有关JS日期的大多数更多信息,here on MDN。)
const
// Selects input element
dateInput = document.getElementById("date"),
// Defines Date object
date = new Date(),
// Extracts component parts of Date object
year = date.getFullYear(),
month = date.getMonth(),
day = date.getDate(),
// Defines a function to add a leading zero if needed
pad = part => part < 10 ? "0" + part : part,
// Formats date to meet the `input` element's expectations -- like: `yyyy-mm-dd`
// (Adds +1 to month b/c `getMonth()` uses a zero-based array)
dateString = year + "-" + pad(month + 1) + "-" + pad(day);
// Inserts date string into input element
dateInput.defaultValue = dateString;
// Repeats this process for the "time" parts
/*
const
timeInput = document.getElementById("time"),
hours = date.getHours(),
minutes = date.getMinutes(),
seconds = date.getSeconds(),
timeString = pad(hours) + ":" + pad(minutes) + ":" + pad(seconds);
timeInput.defaultValue = timeString;
*/
<input id="date" type="date" />
<!--
// Optional input for time
<input id="time" type="time" />
-->
答案 2 :(得分:1)
已解决
这就是我所做的。
在名为
的javascript文件中get_today_date.js
存储在路径
static / js / get_today_date.js
我插入了
function get_today_date() {
var now = new Date();
var day = ("0" + now.getDate()).slice(-2);
var month = ("0" + (now.getMonth() + 1)).slice(-2);
var today = now.getFullYear()+"-"+(month)+"-"+(day);
document.getElementById('date_to_turn_into_today').value = today;
}
如此处https://stackoverflow.com/a/57953522/7658051所示。
然后在HTML页面的</body>
结束标记之前,插入
{% load static %}
<script type="text/javascript" src={% static "js/get_today_date.js" %}></script>
<script> get_today_date() </script>
它运行完美。
即使安装了控制台,也没有必要安装模块时刻
警告:app_glossario.glossary_entry.Data_inserimento_entry:(fields.W161)提供了固定的默认值。提示:您似乎将此字段的默认日期/时间/日期时间设置为默认值。这可能不是您想要的。如果要将当前日期作为默认日期,请使用django.utils.timezone.now
我的应用运行正常。
答案 3 :(得分:0)
以前的代码不起作用,只是因为我忘记了用HTML调用该函数,所以我只需要添加
get_today_date()但是最后,我不确定我是否正确安装了上一个javascript脚本所需的moment模块。