Django中的简单日期时间选择器

Posted

技术标签:

【中文标题】Django中的简单日期时间选择器【英文标题】:Easy date time picker in Django 【发布时间】:2022-01-04 12:25:49 【问题描述】:

我想在我的一些页面中添加几个日期选择器。 我已经按照以下链接中的指南获取了 Fengyuan Chen 的 Datepicker(最后一个): https://simpleisbetterthancomplex.com/tutorial/2019/01/03/how-to-use-date-picker-with-django.html

如果我使用提供的代码创建一个独立的 html 页面,那就太好了! 我不明白如何在其他页面中嵌入日期时间选择器。

我所有的 html 页面都扩展了一个基础。我把所有的内容都放在了基础头中:

base.html:

 <head>
    /* some unrelated things*/
    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"> 
    </script>

    <!-- Fengyuan Chen's Datepicker -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.css" integrity="sha256-b88RdwbRJEzRx95nCuuva+hO5ExvXXnpX+78h8DjyOE=" crossorigin="anonymous" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.js" integrity="sha256-/7FLTdzP6CfC1VBAj/rsp3Rinuuu9leMRGd354hvk0k=" crossorigin="anonymous"></script>

</head>

然后,在我需要选择器的页面中:

    % extends 'main/base.html' %
    <input id="datepicker">

    % block myBlock%
        <script>
          $(function () 
            $("#datepicker").datepicker();
          );
        </script>
    % endblock %

在我看来

def test1(response):
    
    return render(response, "main/test1.html", )

结果是我得到一个根本不动的输入字段。

令我感到沮丧的是,许多指南是针对独立页面的,而描述嵌入的却不多。

【问题讨论】:

【参考方案1】:

如果您没有使用任何类型的模型或表单,请在 html 文件中像这样使用它,这与 Django 之前加载该函数没有任何关系:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Datepick</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
  <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
  <script>
  $( function() 
    $( "#datepicker" ).datepicker();
   );
  </script>
</head>
<body>
<input type="text" id="datepicker">
</body>
</html>

如果您使用的是表单或模型,则可以使用小部件:

from django.forms.widgets import DateInput
class dateform(forms.ModelForm):
    class Meta:
        model = date
        fields = '__all__'
        labels = 
            'dob':'Date Of Birth',
        
        widgets = 
            'dob': forms.DateInput(attrs='type': 'date')
        

【讨论】:

【参考方案2】:

最后,包含日期选择器的最简单方法是依赖input type 'date'

我知道有时不同的浏览器可能会以不同的方式显示它,但重要的是它会做我想要它做的事情:让用户选择一个日期。

html page

<form method="POST">
    % csrf_token %        
    Start date 
    <input type = 'date'  name='start_date' value=defaultDates.start>
    End date 
    <input type = 'date'  name='end_date' value=defaultDates.end>
    <button type="submit" class="btn btn-info" name="setDateRange.end">Set Date Range</button>
</form>

【讨论】:

type="date" 的元素在 IE11 及更早版本中不显示为任何日期字段/日历 @Blackranger 你是完全正确的,但我的应用程序将无法通过互联网访问。这将是一个仅限局域网的网站。所有用户都有能够理解 type="date" 的浏览器版本。所以我会坚持下去,虽然你确实是对的。

以上是关于Django中的简单日期时间选择器的主要内容,如果未能解决你的问题,请参考以下文章

django中的日期时间选择器不使用forms.py

Django crudbuilder & Bootstrap 日期选择器

django:使用管理员日期选择器

Django Forms - 当字段具有初始数据时,JQuery 日期时间选择器不显示

Django使用日期选择器按月动态搜索项目

JAVA中的日期和时间选择器[关闭]