【问题标题】:Changing between applications in a django site在 django 站点中的应用程序之间进行更改
【发布时间】:2023-04-03 19:35:01
【问题描述】:

我的站点中有 2 个应用程序:

  • 用户
  • 基础

主 url conf 总是使用 appname 为 base/index.html 的 url 当从 base/index.html 提供 url 操作说 href="login" 时,它会自动 搜索“base/login.html”

我想让它切换应用并搜索“users/login.html”

如何强制它在 html href 或 urlconf 中切换应用程序。我更喜欢使用 url conf,但不知道如何使用。

用户/url.py

from django.conf.urls import patterns, include, url
from emp_users.views import *
from django.conf import settings
from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url(r'^index/$', RedirectView.as_view(url='/hr_base/index', permanent=False), name='index'),
    url(r'^new_user/$', register_user),
    url(r'^new_hr_user/$', register_hr_user),
)

site/urls.py : 这是主项目 urls.py

urlpatterns = patterns('',
    url(r'^base/index$','hr_base.views.index'),
    url(r'^users/', include('emp_users.urls')),
)
urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT},),# 'show_indices':True}),
)

site/base/templates/base/index.html

<a href="login">Login</a>

这应该指向生成 url users/login 然后访问 user/views.py

【问题讨论】:

  • 可能发布您的 URL 路由和模板示例将更好地说明您的情况。
  • 没有所谓的“切换应用程序”。应用程序不是您所处的事物,它们只是功能的集合。
  • 要详细说明@DanielRoseman 所说的内容,请查看文档中的这一点,"Projects vs. apps," 解释了 django 的“应用程序”是什么意思,以及它如何融入您的整个项目。 “应用程序是做某事的 Web 应用程序 - 例如,Weblog 系统、公共记录数据库或简单的投票应用程序。项目是特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。”强调我的。
  • 我得到了那部分,但我需要的是 url 实际切换。 base/ 被自动添加到 url 模式中。我需要一种方法将其更改为 user/
  • 无论我提供什么网址,都会为其添加 base/ 前缀。如果我提供 url users/new_user,它将使其成为 base/users/new_user 并返回 404

标签: html django python-3.x


【解决方案1】:
urlpatterns = patterns('',
    url(r'^base/login/$', 'base.views.login'),
    url(r'^users/login/$', 'users.views.login')  
)

或 在主 url.py 文件中

urlpatterns = patterns('',
    url(r'^base/', include('base.url'),
    url(r'^users/', include('users.url') ,
)

【讨论】:

    【解决方案2】:

    Django 不会在任何地方添加任何 URL。您只是在模板中提供了一个相对 URL,因此您的浏览器正在为其添加当前路径。如果要指定不同的路径,则需要提供完整的 URL:&lt;a href="/users/new_user"&gt;

    但是,无论如何您都不应该在模板中对 URL 进行硬编码。你应该让 Django 提供完整的 URL:

    <a href="{% url 'login' %}">Login</a>
    

    【讨论】:

    • 我发现了如何做到这一点。诀窍不在你的python代码中。它在您的 html 链接中。我们可以为每个应用程序使用带有相对 url 的 url 模式,但是在您的 html 代码中,您清楚地将相对 url 指定为 // 这解决了问题。必须做很多试验和错误才能到达这里。我确实改变了 url conf 中的任何内容。它仅适用于正在更改的 html 链接。感谢所有的帮助。我真的学到了很多。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多