【问题标题】:URL problems for Django Help systemDjango 帮助系统的 URL 问题
【发布时间】:2013-02-06 20:13:25
【问题描述】:

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

设置如下。

在我的主要urls.py 我有:

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

这位于默认的admin url 和Grappelli url 之前。

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();
    }
  });
}

在我的views.py 中的管理员帮助应用程序中:

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

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

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

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

【问题讨论】:

    标签: django django-admin


    【解决方案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。 “帮助”也不好(内置功能),我建议“管理员帮助”。 :-)

    【讨论】:

      【解决方案2】:

      urlconf 需要list-modelXYZ

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

      当您访问 list_modelXYZ 时(注意下划线)

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

      错别字?

      还有'admin-help.views.list-modelXYZ'里面的urlconf似乎应该是'admin_help.views.list_modelXYZ'

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

      【讨论】:

      • @Roger 检查您的主要 urls.py,它已经包含 ^admin-help。但在 sub urls.py 中还有另一个 ^admin-help...
      猜你喜欢
      • 2022-08-07
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多