【问题标题】:Serve entirely static (documentation) website from Django url in Django 1.10在 Django 1.10 中从 Django url 提供完全静态(文档)的网站
【发布时间】:2017-04-05 15:09:42
【问题描述】:

我正在使用mkdocs 作为一个 wiki 文档站点,该站点提供由各种人创建的降价教程和一般信息文件。 mkdocs 在site 目录中输出一个完全静态的站点。无论如何在 django 1.10 中为这个网站提供服务吗?我知道你曾经能够做这样的事情:

 url(r'^docs/wiki/', 'django.views.static.serve', {'document_root': base.DOCS_ROOT, 'path': 'index.html'}),
 url(r'^docs/wiki/(?P<path>.*)$', 'django.views.static.serve', {'document_root': base.DOCS_ROOT}),

但这在 Django 1.10 中不再适用,因为视图必须是可调用的列表或元组。

我不希望从模板中提供此服务,因为网站的资产是为了不将 mkdocs 创建的资产从它创建的可能在模板中的 html 文件拆分到 django 静态目录中。

如果尝试运行服务器会给出错误:

raise TypeError('view must be a callable or a list/tuple in the case of include().')

有什么简单的方法可以用 url 做到这一点?

【问题讨论】:

  • 试过我的代码了吗..??
  • 是的。不过,我仍然没有得到像 css 和 javascript 这样的资产。不知道为什么。但这确实为我的文件提供了正确的服务。会接受你的回答。

标签: python django django-templates django-1.10


【解决方案1】:

Django 1.10 不再允许您在 URL 模式中将视图指定为字符串(例如 'django.views.static.serve')。

解决方案是更新您的 urls.py 以包含可调用的视图。这意味着您必须在 urls.py 中导入视图。如果您的 URL 模式没有名称,那么现在是添加一个的好时机,因为使用点分 Python 路径进行反转也不再有效。

像这样更新你的代码:

from django.views.static import serve
from django.conf.urls import url, patterns

urlpatterns = [

  url(r'^docs/wiki/',serve, {'document_root': base.DOCS_ROOT, 'path': 'index.html'},name = "wiki1"),
  url(r'^docs/wiki/(?P<path>.*)$', serve, {'document_root': base.DOCS_ROOT},name = "wiki2"),
  ]

【讨论】:

  • 即使使用第二个 url 也无法正确提供 css 文件或 Django 文件的任何原因?
  • @Nucl3ic 你能分享一下 base.DOCS_ROOT 设置吗?以及您的项目文件层次结构??
  • 说我尝试在索引中提供 ,它没有应用。但是,出于某种原因,提供了 thje ./ 级别的阶梯表。我应该更改第二个网址的正则表达式吗? DOCS_ROOT = 'backend/docs/wiki/site'
  • @Nucl3ic 抱歉,我无法理解您的问题。
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多