如何在Django中设置基本URL
我想从位置运行Django,这样我就有了位于的管理界面。我可以看到登录窗口,但当我登录时,我会被重定向到如何在Django中设置基本URL,django,django-admin,Django,Django Admin,我想从位置运行Django,这样我就有了位于的管理界面。我可以看到登录窗口,但当我登录时,我会被重定向到 在哪里可以设置Django的基本URL?我尝试使用BASE_URL,但没有成功。这应该适合您 from django.conf.urls import patterns, url urlpatterns = patterns('', (r'^someuri/admin/', include(admin.site.urls) ), ) @AgileDeveloper的答案对于一次性
在哪里可以设置Django的基本URL?我尝试使用BASE_URL,但没有成功。这应该适合您
from django.conf.urls import patterns, url
urlpatterns = patterns('',
(r'^someuri/admin/', include(admin.site.urls) ),
)
@AgileDeveloper的答案对于一次性的admin案例是完全正确的。但是,是否希望对所有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)
])),
]
我有一个项目,有一个类似的设置。我让django在apache的虚拟环境中运行。在我的000-default.conf文件中,我将WSGIScriptAlias设置为:
WSGIScriptAlias /someuri /path/to/wsgi.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),
]
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',
],
},
},
]
以下是从子目录为项目提供服务的WSGIScriptAlias文档
在URL.py文件中,我设置了以下内容:
WSGIScriptAlias /someuri /path/to/wsgi.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),
]
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',
],
},
},
]
登录后,我被重定向到。@James Wallace的答案很好,假设您在/someuri控制了托管Django的web服务器。在该配置中,服务器将在头中将SCRIPT_NAME的值传递给Django,Django将知道它正在该子路径上服务 但是,如果您无法控制前端服务器,则可以通过在项目中添加settings.py来强制Django假定该值:
USE_X_FORWARDED_HOST = True
FORCE_SCRIPT_NAME = '/someuri'
之后,即使在管理应用程序中,静态文件、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
在同一文件中,还需要更改模板并添加以下内容:
WSGIScriptAlias /someuri /path/to/wsgi.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),
]
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',
],
},
},
]
然后,您将希望将静态文件收集到定义的目录中:
python manage.py collectstatic
或
项目级URL.py文件应如下所示(Django v1.11):
此后,管理包应该可以正常工作,带有适当的样式表和所有内容。唯一一个似乎不太好用的是“查看站点”链接,因为它缺少斜杠。我没有找到一个解决方案,但它可能涉及黑客的管理应用程序
除此之外,在子路径下安装Django还有各种在线指南。它很凌乱,但上面的内容避免了最令人头痛的问题。@sofist这个答案对您有帮助吗?这两个答案的问题都是Django安装在“/someuri”上,这意味着它看不到路径的那一部分。您可以分享一下您在最后提到的一些指南吗?