Django:使用管理界面的日期选择器

13

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

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

我:

a)在我的forms.py文件中包含了以下行:

from django.contrib.admin import widgets

b) and used the widget like this :

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

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

{{form.media}}

如何包含js/样式等内容。

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

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

DateTimeShortcuts.js(第254行)中未定义addEvent

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

更新:基本上,需要包含核心并(或伪造)i18lization

更新2:Carl指出这与在自定义表单中使用Django时间/日期小部件相当重复(尽管从不同的位置开始)


此问题是一个重复的。在这里查看答案:https://dev59.com/DHVD5IYBdhLWcg3wQJST#38916 - Carl Meyer
谢谢...有趣的是,在这里的侧边栏或我写问题时,它都没有出现在任何“相关问题”中。 - interstar
卡尔·迈耶提到的问题的答案表明,这是一个需要大量工作的答案,不仅仅是使用jQuery或其他知名库来实现自己的日期选择器。 - rossdavidh
几年后,现在有一些替代方案,比如使用浏览器内置的日期选择器。不需要JavaScript或CSS。 - djvg
3个回答

5
不,这不是一个bug。
它试图在js中调用gettext()国际化函数。你可以像在python代码或模板中一样使用js国际化,这只是一个不太为人知的功能。
如果你的项目中没有使用js国际化,你可以只放置:
<script>function gettext(txt){ return txt }</script>

在您的顶部模板中添加js解释器,以避免出现问题。这是一种笨办法,我知道。
编辑:
或者,您可以包含精确的jsi18n js django admin引用,以使其在其他语言环境下正常工作。我不知道这到底是哪一个。
这是今天发布在django用户邮件列表上的: http://groups.google.com/group/django-users/browse_thread/thread/2f529966472c479d# 也许是你发布的,无论如何,以防万一。

谢谢...是的,这很hacky,但它让我暂时解决了那个问题。 - interstar
谢谢提供链接,文章写得很好,让整个过程变得清晰明了,感觉不再像是在瞎搞了。 - monkut

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。

1
如果您的 URL 映射中没有 jsi18n,那么添加它是没有意义的。如果您在 urls.py 中添加了正确的内容,则 Gettext 函数将在此处出现:urlpatterns = patterns('', (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'),) - Vasil
好的观点..虽然我也在管理表单中找到了那一行。所以我认为它在这个服务器上可以工作。既然如此...为什么他们可以用而我不能呢?也许因为它在管理树中是相对的。 - interstar
是的,但它是相对URI,所以如果您可以找出在管理模板中解析为什么,您可以将其作为绝对URL放置并使其工作。我认为这样做日期选择器的国际化也会正常工作。 - Vasil

1
您可能会发现以下内容适合您:
<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 }} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接