spo*_*jak 7 django django-admin
我想从位置https://www.example.com/someuri/运行Django,以便我在https://www.example.com/someuri/admin/上有管理界面.我可以看到登录窗口但是当我登录时,我被重定向到https://www.example.com/admin/.
我在哪里可以将Django的基本URL设置为https://www.example.com/someuri/?我试过BASE_URL,但没有运气.
rai*_*ert 11
@AgileDeveloper 的回答对于管理员的一次性案例是完全正确的。但是,是否希望为所有 URL 设置这种方式?如果是这样,也许你应该做这样的事情
from django.conf.urls import include, url
from . import views
urlpatterns = [
url(r'^someuri/', include([
url(r'^admin/', include(admin.site.urls) ),
url(r'^other/$', views.other)
])),
]
Run Code Online (Sandbox Code Playgroud)
小智 6
我有一个具有类似设置的项目。我使用带有 apache 的虚拟环境运行 django。在我的 000-default.conf 文件中,我将 WSGIScriptAlias 设置为以下内容:
WSGIScriptAlias /someuri /path/to/wsgi.py
Run Code Online (Sandbox Code Playgroud)
以下是有关 WSGIScriptAlias 的文档,用于从子目录https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/modwsgi/#using-mod-wsgi-daemon-mode为项目提供服务。
比在 urls.py 文件中我设置了以下内容:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^', include('someuri.urls')),
url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
登录后,我被重定向到http://example.com/someuri/admin/
假设您可以控制在 /someuri 托管 Django 的 Web 服务器,@James Wallace 的答案会很好地工作。在该配置中,服务器会将标头中的 SCRIPT_NAME 值传递给 Django,Django 将知道它正在该子路径上提供服务。
但是,如果您无法控制前端服务器,那么您可以通过添加到项目中的 settings.py 来强制 Django 假定该值:
USE_X_FORWARDED_HOST = True
FORCE_SCRIPT_NAME = '/someuri'
Run Code Online (Sandbox Code Playgroud)
之后,即使在管理应用程序中,您可能仍然会遇到静态文件、css 等问题。在默认配置中,这些由 Django 开发服务器提供,无需更改。但是,通过上述更改,静态文件将丢失。假设您仍然希望通过内部 Django 开发服务器(而不是通过外部 Web 服务器)提供这些文件,您需要添加到 settings.py 项目文件中:
STATIC_SUFFIX = '/static/'
STATIC_URL = FORCE_SCRIPT_NAME + STATIC_SUFFIX
MEDIA_SUFFIX = '/media/'
MEDIA_URL = FORCE_SCRIPT_NAME + MEDIA_SUFFIX
Run Code Online (Sandbox Code Playgroud)
在同一个文件中,您还需要更改 TEMPLATES 并添加以下内容:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ STATIC_ROOT ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
然后,您需要将静态文件收集到定义的目录中:
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
或者
python3 manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
项目级 urls.py 文件应如下所示(Django v1.11):
import os
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings
from django.views.generic.base import TemplateView
urlpatterns = [
url(r'^admin/', admin.site.urls),
] + static(settings.STATIC_SUFFIX, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)
此后,管理包应该可以正常工作,具有适当的样式表和所有内容。唯一似乎不能正常工作的是“VIEW SITE”链接,因为它漏掉了一个斜线。我没有找到解决方案,但可能涉及破解管理应用程序。
除此之外,还有各种在线指南可用于在子路径下安装 Django。它很乱,但上面避免了最令人头疼的问题。
小智 1
这应该对你有用。
from django.conf.urls import patterns, url
urlpatterns = patterns('',
(r'^someuri/admin/', include(admin.site.urls) ),
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11100 次 |
| 最近记录: |