我正在为Django应用程序的管理站点实现一个帮助系统。帮助文本在名为admin-help的单独应用程序中实现为模型对象。管理网站使用Grappelli
。
设置如下。
在我的主urls.py
我有:
(r'^admin-help/', include('admin-help.urls')),
它位于默认的admin
网址和Grappelli
网址之前。
我urls.py
应用的admin-help
代码:
urlpatterns = patterns('',
...
url(r'^admin-help/list-modelXYZ', 'admin-help.views.list-modelXYZ'),
...
)
我的计划是从管理页面中通过AJAX调用获取帮助页面。因此,我修改了一个特定的管理模板,以包含一个带有onclick
处理程序的HELP按钮,以调用传递主题的Javascript函数:
<li>
<a href="#" onclick="showHelp('list_modelXYZ')" class="grp-state-focus">Help</a>
</li>
showHelp()
函数执行AJAX调用,将请求的主题作为请求的URL的一部分传递:
function showHelp(topic) {
grp.jQuery.ajax({
type: 'GET',
url: '/admin-help/' + topic,
success: function(html) {
grp.jQuery('#help-content-area').html(html);
grp.jQuery('#help-frame').show();
}
});
}
在我views.py
中的admin-help应用中:
def list_modelXYZ():
return HttpResponse("Hello world!")
当我点击帮助按钮时,我会得到一个带有以下网址的404:
http://localhost:8080/admin-help/list_modelXYZ
为什么我会收到404?我不是Django Jedi,希望有人可以指出我的错误......
答案 0 :(得分:1)
urlconf需要list-modelXYZ
url(r'^admin-help/list-modelXYZ', 'admin-help.views.list-modelXYZ'),
当您访问list_modelXYZ
时(请注意下划线)
http://localhost:8080/admin-help/list_modelXYZ
错字?
urlconf中的'admin-help.views.list-modelXYZ'
似乎应该是'admin_help.views.list_modelXYZ'
此外,两个urls.py文件中有两个^admin-help
...
答案 1 :(得分:1)
如果您在“admin-help”前缀下包含您的网址,
(r'^admin-help/', include('admin-help.urls')),
然后“根”该前缀下的那些URL。 见https://docs.djangoproject.com/en/dev/topics/http/urls/#including-other-urlconfs 这意味着前缀“admin-help”在到达您的子处理程序时已经“处理”了。问题是您的子处理程序正在重复前缀:
urlpatterns = patterns('',
...
url(r'^admin-help/list-modelXYZ', 'admin-help.views.list-modelXYZ'),
...
)
所以你匹配“admin-help / admin-help / list-modelXYZ”。 只需从您的子网址中删除前缀,您就会得到您想要的内容:
管理员的帮助/ urls.py:
urlpatterns = patterns('',
...
url(r'^list-modelXYZ', 'admin-help.views.list-modelXYZ'),
...
)
如果您有很多这些,可以快捷方式:
urlpatterns = patterns('admin-help.views',
...
url(r'^list-modelXYZ', 'list-modelXYZ'),
url(r'^more$', 'something_else'),
...
)
P.S。:“admin-help”对于模块来说不是一个好名字,因为“ - ”是“减号”运算符。 “import admin-help”会给你一个SyntaxError。 “帮助”也不好(内置功能),我建议“adminhelp”。 : - )