Django帮助系统的URL问题

时间:2013-02-21 13:23:09

标签: django django-admin

我正在为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,希望有人可以指出我的错误......

2 个答案:

答案 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”。 : - )