我的代理(nginx公共端口80)到django(gunicorn wsgi localhost端口8000)剥离了应用程序“/ app”的路径,因此对http://server/app/hello
的请求显示为/hello
并请求http://server/app/admin
似乎将django视为/admin
。
问题是管理站点在登录屏幕中生成带有绝对URL的输出,例如<form action="/admin/"...
。因此,用户会看到管理员登录屏幕,但它会发布到不存在的http://server/admin
。 (我希望它会使用相对的URL并在任何地方工作。)
让管理页面普遍预先添加“/ app”(如form action="/app/admin/"
到页面输出中生成的所有网址的最简单方法是什么?我希望Django内置的东西就像一个简单的定义,而不必创建特殊的过滤器然后重写模板来使用它们,但我似乎无法找到它。
答案 0 :(得分:15)
请参阅FORCE_SCRIPT_NAME的文档:
https://docs.djangoproject.com/en/dev/ref/settings/#force-script-name
将其设置为'/ app'而不是默认值None。
答案 1 :(得分:0)
最简单的方法是编写自己的wsgi调度程序,如下面的
def application(environ, request_response):
# do whatever you want with path
sys.path.append(path_to_django_project)
os.environ['DJANGO_SETTINGS_MODULE'] = 'proj_name.settings'
# pass control to django
import django.core.handlers.wsgi
app_entry_point = django.core.handlers.wsgi.WSGIHandler()
return app_entry_point(environ,request_response)