簡體   English   中英

從Django開發服務器的根服務器提供靜態文件

[英]Serving static files from root of Django development server

我的目標是從我的開發服務器的根目錄中提供Angular項目。 就Django而言,文件將是完全靜態的,不需要Django模板處理。 然后,角度項目將對位於同一開發服務器上的/ api /的Django項目進行資源調用,然后將返回從Angular項目的視圖生成的json結果進行處理。

我認為這就像在urls.py文件中添加以下內容一樣簡單。

url(r'^/', 'django.views.static.serve', {
        'document_root':'/Users/kyle/Development/project/site/app',
}),

要么

+ static("^/$", document_root="/Users/kyle/Development/project/site/app")

到urlpatterns的結尾。

/ project / site / app是Angularjs文件的目錄。

但是,這兩個都讓我有404錯誤。

如果存在更明顯的解決方案,我願意改變項目的結構。

您需要同時提供index.html和靜態文件/在Django 1.10中這樣做:

from django.contrib.staticfiles.views import serve
from django.views.generic import RedirectView

urlpatterns = [

    # / routes to index.html
    url(r'^$', serve,
        kwargs={'path': 'index.html'}),

    # static files (*.css, *.js, *.jpg etc.) served on /
    url(r'^(?!/static/.*)(?P<path>.*\..*)$',
        RedirectView.as_view(url='/static/%(path)s')),
]

看到這個答案 ,我寫了一個更完整的解釋,特別是如果你想用它來生產。

事實證明,這是兩件事的組合,正如shavenwarthog所說,它不應該有斜線。 此外,它需要一個正則表達式來將其定向到文件。 最后一行最終成為:

url(r'^(?P<path>.*)$', 'django.views.static.serve', {
        'document_root':'/Users/kyle/Development/project/site/app',
}),

然后我可以訪問像這樣的文件

http://localhost/beer.jpg
  1. 請注意,默認情況下,Django不會提供目錄列表。 如果文件/Users/kyle/Development/project/site/app/beer.jpg沒有顯示為http://localhost/beer.jpg你還會得到404嗎?

  2. urls.py URL不以斜杠開頭; url(r'beer')url(r'^/beer')

我建議你去尋找標准的STATIC支持。 這很尷尬,但是讓你在開發過程中簡單地提供文件,並切換到第三方服務器(即Nginx)進行生產:

https://docs.djangoproject.com/en/dev/howto/static-files/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM