有一个任务是在 Django 上启动一个站点,而不是在整个域上,而是在子路径内,也就是说,http://example.com/subpath/在类型地址处打开主站点,在地址处打开http://example.com/subpath/admin/管理面板,等等。如何在不手动重写 urls.py 中的所有链接的情况下做到这一点?换句话说,如何在 Django 中为所有 URL 添加前缀?
有一个任务是在 Django 上启动一个站点,而不是在整个域上,而是在子路径内,也就是说,http://example.com/subpath/在类型地址处打开主站点,在地址处打开http://example.com/subpath/admin/管理面板,等等。如何在不手动重写 urls.py 中的所有链接的情况下做到这一点?换句话说,如何在 Django 中为所有 URL 添加前缀?
对于 Django 前面是 nginx 的情况(这正是它应该在生产中的样子) ,enSO 建议在settings.py (或另一个 DJANGO_SETTINGS_MODULE)中设置 FORCE_SCRIPT_NAME :
然后 nginx 设置可能看起来像这样:
在这种情况下,对 nginx 的请求将以 .form 的形式到达,
http://example.com/subpath/admin/并以http://localhost:8000/admin/. 在响应中,Django 将归因/subpath于页面上的所有链接(当然使用reverseor{% url %})。这个设置可能很不方便,因为 Django 只接受不带 的引用
/subpath,这对于开发来说不是很方便。因此,我更喜欢明确地为 urls.py 添加前缀。这可以在根 urlconf 中完成一次:因此,我们在 settings.py 中写入:
为了不使用前缀,我们写
URL_PREFIX = ''.那么 nginx 的设置会略有不同:
这样 Django 接受 form 的请求,
http://localhost:8000/subpath/admin/在开发服务器上完全不用 nginx 也能正常工作,方便测试。嗯,也
STATIC_ROOT = '/subpath/static/'来MEDIA_ROOT = '/subpath/media/'尝尝。有关 proxy_pass 末尾的斜杠和其他 URI 的影响,请参阅nginx 文档。
(记住,你不应该在生产环境中运行 Django 的内置开发服务器,因为它不安全。使用 uwsgi、gunicorn 或其他严重的 wsgi 服务器。)