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

Posted

技术标签:

【中文标题】django:使用管理员日期选择器【英文标题】:django : using admin datepicker 【发布时间】:2010-10-14 05:43:08 【问题描述】:

我正在尝试在我自己的 django 表单中使用管理员日期选择器。

大致关注这里的讨论:http://www.mail-archive.com/django-users@googlegroups.com/msg72138.html

我已经

a) 在我的 forms.py 中包含了这一行

from django.contrib.admin import widgets

b) 并像这样使用小部件:

date = forms.DateTimeField(widget=widgets.AdminDateWidget())

c) 在我的实际模板中,我添加了:

form.media

要包含js/样式等

但是,当我尝试查看我的表单时,我没有得到漂亮的小部件;只是一个普通的文本框。 Firefox javascript 错误控制台向我展示了:

gettext 未在 calendar.js 中定义(第 26 行)

addEvent 没有在 DateTimeShortcuts.js 中定义(第 254 行)

有什么建议吗?这是 Django 自己的 javascript 库中的错误吗?

更新:基本上,需要包含核心和(或假的)i18lization

更新 2:Carl 指出这几乎与 Using Django time/date widgets in custom form 重复(尽管从不同的位置开始)

【问题讨论】:

这个问题是重复的。在这里查看答案:***.com/questions/38601/… 谢谢 ... 有趣的是,这并没有出现在任何“相关问题”中 Carl Meyer 引用的问题的答案清楚地表明,这是一个需要大量工作的答案,而不仅仅是使用 jQuery 或其他一些知名库实现您自己的日期选择器。跨度> 几年后,现在有了一些替代方案,例如using the browser's built-in date picker。无需 javascript 或 css。 【参考方案1】:

不,这不是错误。

它试图在 js 中调用 gettext() 国际化函数。您可以像在 python 代码或模板中一样进行 js 国际化,这只是一个鲜为人知的功能。

如果你的项目中不使用 js 国际化,你可以放。

<script>function gettext(txt) return txt </script>

在您的顶部模板中,这样 js 解释器就不会阻塞。

我知道这是一种解决问题的 hacky 方法。

编辑:

或者您可以包含确切的 jsi18n js django 管理员引用,以使其即使与其他语言一起工作。不知道是哪一个。

这是今天在 django-users 上发布的:

http://groups.google.com/group/django-users/browse_thread/thread/2f529966472c479d#

也许是你,以防万一。

【讨论】:

谢谢...是的,它很老套,但它让我暂时解决了这个问题 感谢您的链接,它写得很好,使过程清晰,感觉不那么hacky。【参考方案2】:

我想我通过将这些行显式添加到我的模板中解决了前半部分:

<script type="text/javascript" src="../../../jsi18n/"></script> 
<script type="text/javascript" src="/admin_media/js/core.js"></script>
<script type="text/javascript" src="/admin_media/js/admin/RelatedObjectLookups.js"></script>

但它仍然报告不知道 gettext

【讨论】:

如果您的 url 映射中没有它,那么添加 jsi18n 是没有意义的。如果您在 urls.py 中添加正确的内容,这就是 gettext 函数所在的位置: urlpatterns = patterns('', (r'^jsi18n/(?P\S+?)/$', 'django.views .i18n.javascript_catalog'), ) 好点..虽然我也在管理表单中找到了那行。所以我认为它可以在这台服务器上运行。在这种情况下......如果不是我,为什么要为他们。可能是因为它在管理树中是相对的。 :) 是的,但它是一个相对 uri,所以如果你能在管理模板中弄清楚它解析为什么,你可以把它作为一个绝对 url 并让它工作。我认为这样事件适当的日期选择器国际化将起作用。【参考方案3】:

您可能会找到以下适合您的作品:

<link href="/media/css/base.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/media/js/core.js"></script>
 form.media  

【讨论】:

以上是关于django:使用管理员日期选择器的主要内容,如果未能解决你的问题,请参考以下文章

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

如何以酥脆的形式在日期字段上显示日期选择器日历?

Django crudbuilder & Bootstrap 日期选择器

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

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

Twitter Bootstrap 的 Django 和日期范围选择器组件