RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 885761
Accepted
andreymal
andreymal
Asked:2020-09-26 18:57:24 +0000 UTC2020-09-26 18:57:24 +0000 UTC 2020-09-26 18:57:24 +0000 UTC

如何在子路径中运行 Django 站点?

  • 772

有一个任务是在 Django 上启动一个站点,而不是在整个域上,而是在子路径内,也就是说,http://example.com/subpath/在类型地址处打开主站点,在地址处打开http://example.com/subpath/admin/管理面板,等等。如何在不手动重写 urls.py 中的所有链接的情况下做到这一点?换句话说,如何在 Django 中为所有 URL 添加前缀?

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    andreymal
    2020-09-26T18:57:24Z2020-09-26T18:57:24Z

    对于 Django 前面是 nginx 的情况(这正是它应该在生产中的样子) ,enSO 建议在settings.py (或另一个 DJANGO_SETTINGS_MODULE)中设置 FORCE_SCRIPT_NAME :

    FORCE_SCRIPT_NAME = '/subpath'
    

    然后 nginx 设置可能看起来像这样:

    server_name example.com;
    # ...
    location /subpath/ {
        proxy_pass http://localhost:8000/;  # внимание: есть слэш в конце
        include proxy_params;
        # ...
    }
    

    在这种情况下,对 nginx 的请求将以 .form 的形式到达,http://example.com/subpath/admin/并以http://localhost:8000/admin/. 在响应中,Django 将归因/subpath于页面上的所有链接(当然使用reverseor {% url %})。


    这个设置可能很不方便,因为 Django 只接受不带 的引用/subpath,这对于开发来说不是很方便。因此,我更喜欢明确地为 urls.py 添加前缀。这可以在根 urlconf 中完成一次:

    from django.conf import settings
    from django.conf.urls import include, url
    # ... прочие импорты
    
    urlpatterns = [url(settings.URL_PREFIX, include([
        url(r'^$',views.index, name='index'),
        url(r'^admin/', admin.site.urls),
        # ... и так далее
    ]))]
    

    因此,我们在 settings.py 中写入:

    URL_PREFIX = 'subpath/'
    

    为了不使用前缀,我们写URL_PREFIX = ''.

    那么 nginx 的设置会略有不同:

    server_name example.com;
    # ...
    location /subpath/ {
        proxy_pass http://localhost:8000;  # внимание: слэш в конце пропал
        include proxy_params;
        # ...
    }
    

    这样 Django 接受 form 的请求,http://localhost:8000/subpath/admin/在开发服务器上完全不用 nginx 也能正常工作,方便测试。

    嗯,也STATIC_ROOT = '/subpath/static/'来MEDIA_ROOT = '/subpath/media/'尝尝。


    有关 proxy_pass 末尾的斜杠和其他 URI 的影响,请参阅nginx 文档。

    (记住,你不应该在生产环境中运行 Django 的内置开发服务器,因为它不安全。使用 uwsgi、gunicorn 或其他严重的 wsgi 服务器。)

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5