0

我正在为 Django 应用程序的管理站点实现帮助系统。帮助文本在名为 admin-help 的单独应用程序中作为模型对象实现。管理站点使用Grappelli.

设置如下。

在我的主要urls.py我有:

(r'^admin-help/', include('admin-help.urls')),

它位于默认adminurl 和Grappelliurl 之前。

在我拥有urls.py的应用程序中:admin-help

urlpatterns = patterns('',
    ...
    url(r'^admin-help/list-modelXYZ', 'admin-help.views.list-modelXYZ'),
    ...
)

我的计划是通过 AJAX 调用从管理页面中提取帮助页面。因此,我修改了一个特定的管理模板,以包含一个带有onclick处理程序的帮助按钮,以调用传递主题的 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();
    }
  });
}

在我的 admin-help 应用程序中views.py

def list_modelXYZ():
  return HttpResponse("Hello world!")

当我单击帮助按钮时,我得到一个带有以下 url 的 404:

http://localhost:8080/admin-help/list_modelXYZ

为什么我会得到 404?我不是 Django Jedi,希望有人能指出我的错误......

4

2 回答 2

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'

此外,^admin-help两个 urls.py 文件中有两个...

于 2013-02-21T13:37:44.690 回答
1

如果您在“admin-help”前缀下包含您的网址,

(r'^admin-help/', include('admin-help.urls')),

然后在该前缀下“植根”这些 URL。请参阅https://docs.djangoproject.com/en/dev/topics/http/urls/#include-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'),
    ...
)

PS:“admin-help”不是一个好模块的名字,因为“-”是“减号”运算符。“import admin-help”会给你一个 SyntaxError。“帮助”也不好(内置功能),我建议“管理员帮助”。:-)

于 2013-02-21T20:20:13.030 回答