重定向到多个应用中具有相同 url 的路由
redirect to routes that has the same url in multiple apps
我是编码新手,如果这是一个愚蠢的问题,请原谅我,但我在任何地方都找不到明确的答案。
所以我有一个 django 项目里面有两个应用程序,它们都有根 '/',使用 return redirect('/') 让 django 区分这两个根的确切格式和实现是什么在不同的应用程序中可能使用命名路由。
将不胜感激一步一步的指导,提前致谢。
例如,您有一个名为 InitialProject 的 django 项目,该项目中有 2 个应用程序,我们称它们为 MyApp1 和 MyApp2.
您的目录结构应如下所示:
PythonProject/
├─ InitialProject/
│ ├─ __init__.py
│ ├─ asgi.py
│ ├─ settings.py
│ ├─ urls.py
│ ├─ wsgi.py
├─ MyApp1/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ __init__.py
│ ├─ admin.py
│ ├─ apps.py
├─ MyApp2/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ admin.py
│ ├─ __init__.py
│ ├─ apps.py
所以首先,URL是唯一的,即1个URL在这种情况下只能导致一个路径或一个视图功能。但我们可以做的是,我们可以说 URL 以 'APP1' 开头应该查看 MyApp1/urls.py 和以 'APP2' 开头的 URL 应该查看 MyApp2/urls.py
所以在InitialProject/urls.py中,我们定义如下:
from django.urls import path
from django.urls.conf import include
urlpatterns = [
path('APP1/', include('MyApp1.urls')), # Note the trailing forward slash, it is important
path('APP2/', include('MyApp2.urls')),
]
所以,它的作用是:
如果您的 URL 是:HTTP://localhost/APP1/
它会告诉 Django 查看 MyApp1/urls.py 来解析并获取函数,对于 APP2.
也是如此
现在在 MyApp1/urls.py 中我们可以做的是:
from . import views
from django.urls import path
urlpatterns = [
path('', views.my_function_1), # This URL will resolve as HTTP://localhost/APP1/
path('second_url', views.my_function_2), # This URL will resolve as HTTP://localhost/APP1/second_url
]
并且可以对 MyApp2 执行类似的操作。通过这种方法,您将拥有更清晰的 URL 结构,并且还可以轻松导航并查看正在调用的应用程序。
希望您能够理解 URL 模式的工作原理。
您可能会问我们为什么要在 InitialProject/urls.py 中定义初始 URL 模式?因为默认情况下,Django 会先去项目目录查看哪些 URL 模式,从那里我们只能 link 其他 App 的 URL 模式。
我是编码新手,如果这是一个愚蠢的问题,请原谅我,但我在任何地方都找不到明确的答案。 所以我有一个 django 项目里面有两个应用程序,它们都有根 '/',使用 return redirect('/') 让 django 区分这两个根的确切格式和实现是什么在不同的应用程序中可能使用命名路由。 将不胜感激一步一步的指导,提前致谢。
例如,您有一个名为 InitialProject 的 django 项目,该项目中有 2 个应用程序,我们称它们为 MyApp1 和 MyApp2.
您的目录结构应如下所示:
PythonProject/
├─ InitialProject/
│ ├─ __init__.py
│ ├─ asgi.py
│ ├─ settings.py
│ ├─ urls.py
│ ├─ wsgi.py
├─ MyApp1/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ __init__.py
│ ├─ admin.py
│ ├─ apps.py
├─ MyApp2/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ admin.py
│ ├─ __init__.py
│ ├─ apps.py
所以首先,URL是唯一的,即1个URL在这种情况下只能导致一个路径或一个视图功能。但我们可以做的是,我们可以说 URL 以 'APP1' 开头应该查看 MyApp1/urls.py 和以 'APP2' 开头的 URL 应该查看 MyApp2/urls.py
所以在InitialProject/urls.py中,我们定义如下:
from django.urls import path
from django.urls.conf import include
urlpatterns = [
path('APP1/', include('MyApp1.urls')), # Note the trailing forward slash, it is important
path('APP2/', include('MyApp2.urls')),
]
所以,它的作用是: 如果您的 URL 是:HTTP://localhost/APP1/ 它会告诉 Django 查看 MyApp1/urls.py 来解析并获取函数,对于 APP2.
也是如此现在在 MyApp1/urls.py 中我们可以做的是:
from . import views
from django.urls import path
urlpatterns = [
path('', views.my_function_1), # This URL will resolve as HTTP://localhost/APP1/
path('second_url', views.my_function_2), # This URL will resolve as HTTP://localhost/APP1/second_url
]
并且可以对 MyApp2 执行类似的操作。通过这种方法,您将拥有更清晰的 URL 结构,并且还可以轻松导航并查看正在调用的应用程序。
希望您能够理解 URL 模式的工作原理。
您可能会问我们为什么要在 InitialProject/urls.py 中定义初始 URL 模式?因为默认情况下,Django 会先去项目目录查看哪些 URL 模式,从那里我们只能 link 其他 App 的 URL 模式。