Jestem względnie nowy w Django (1.4) i ciężko jest mi zrozumieć filozofię związaną z plikami statycznymi, multimedialnymi i administracyjnymi. Struktura projektu różni się od jednego samouczka do drugiego, i to samo dla Webfaction (gdzie będę hostował moją aplikację). Chciałbym wiedzieć, jaki jest optymalny sposób zorganizowania go i przy jak najmniejszym bólu i edycji podczas wdrażania go do Webfaction, jaki jest sens statycznych mediów, adn plików administracyjnych? Z góry dziękujęZamęt w Django, plikach statycznych i multimedialnych
Odpowiedz
W gruncie rzeczy chcesz udostępniać pliki statyczne przez django w fazie rozwoju. Gdy będziesz gotowy do rozpoczęcia produkcji, serwer powinien zrobić to za Ciebie (są gotowe do zrobienia tego szybko :-))
Oto podstawowa konfiguracja, po zalogowaniu się na serwerze uruchamiasz polecenie collectstatic uzyskać wszystkie staticfiles w folderze static-korzeniowego, co twoje punkty Server do (patrz zasady przepisywania)
./manage.py collectstatic
settings.py
from os import path
import socket
PROJECT_ROOT = path.dirname(path.abspath(__file__)) #gets directory settings is in
# Dynamic content is saved to here
MEDIA_ROOT = path.join(PROJECT_ROOT,'media')
# if ".webfaction.com" in socket.gethostname():
# MEDIA_URL = 'http://(dev.)yourdomain.com/media/'
# else:
MEDIA_URL = '/media/'
# Static content is saved to here --
STATIC_ROOT = path.join(PROJECT_ROOT,'static-root') # this folder is used to collect static files in production. not used in development
STATIC_URL = "/static/"
STATICFILES_DIRS = (
('', path.join(PROJECT_ROOT,'static')), #store site-specific media here.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
settings_deployment.py
from settings import *
DEBUG = False
TEMPLATE_DEBUG = DEBUG
MEDIA_URL = "http://yourdomain.com/media/"
urls.py
...other url patterns...
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns() #this serves static files and media files.
#in case media is not served correctly
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
)
django.conf (lighttpd, to może być Apache lub nginx), ale wierzę webfaction posiada obsługę aplikacji na ustawianie to się łatwo
$HTTP["host"] =~ "(^|\.)yourdomain\.com$" {
fastcgi.server = (
"/django.fcgi" => (
"main" => (
"socket" => env.HOME + "/project/project.sock",
"check-local" => "disable",
)
),
)
alias.url = (
"/media" => env.HOME + "/project/media",
"/static" => env.HOME + "/project/static-root",
)
url.rewrite-once = (
"^(/media.*)$" => "$1",
"^(/static.*)$" => "$1",
"^/favicon\.ico$" => "/static/img/favicon.png",
"^(/.*)$" => "/django.fcgi$1",
)
}
statyczne pliki są pliki wymagane przez aplikacje, które serwer może obsługiwać bez modyfikacji, takich jak niestandardowe skrypty JS, ikony, aplety itp. Najlepszym sposobem na ich wykorzystanie jest umieszczenie statycznych plików w "statycznym" folderze w każdym folderze aplikacji. W ten sposób serwer testowy znajdzie je tam, a jeśli wdrożysz na serwerze produkcyjnym, wystarczy uruchomić python manage.py collectstatic
, aby skopiować je wszystkie w folderze głównym zdefiniowanym w pliku settings.py
Pliki multimedialne są te przesłane przez użytkowników twoich aplikacji, takie jak zdjęcia z awatara, itp.
Pliki administracyjne to pliki statyczne używane przez administratora Django, serwer testowy django je po prostu znajdzie, ale podczas produkcji musisz skopiować lub linkować ten folder, aby administrator mógł faktycznie działać.
Nadzieja to pomaga lepiej widzieć rzeczy ...
Czy nie mogę po prostu utworzyć pojedynczego folderu, w którym umieszczam wszystkie kody css i javascript dla moich stron internetowych zamiast oddzielania ich w folderach?Mam na myśli, że układ strony jest gotowy, ale muszę tylko sprawić, żeby działał z Django. Czy powinienem oddzielić pliki? –
Musisz umieścić pliki statyczne w osobnym katalogu niż kod Pythona lub szablony, ponieważ nie chcesz ujawniać swojego kodu, ale poza tym możesz je ułożyć tak, jak chcesz. Powinieneś przeczytać, że: https://docs.djangoproject.com/en/1.4/howto/static-files/ –
przeczytaj, jak działają filefindery w dokumentach django, wszystko to jest dobrze wyjaśnione, na przykładzie zamieszczonym poniżej Powinien mieć sens, django będzie podążał za hierarchią, której używasz w kodzie do przeglądania plików i zbiera WSZYSTKIE te pliki do folderu głównego statycznego, ale w projekcie deweloperskim ma sens, aby czuć się odseparowanym od miejsca, w którym się znajdują. –
Mój config to:
1.settings.py
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT='/media/'
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = '/media/'
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = '/static/'
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
'/'.join(__file__.split(os.sep)[0:-2]+['static']),
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
2.urls.py
from django.conf import settings
if settings.DEBUG:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
I mój katalog strony jest taki:
root
│ manage.py
│
├─media
├─my_django_py3
│ settings.py
│ urls.py
│ views.py
│ wsgi.py
│ __init__.py
│
├─static
│ 9gq05.jpg
│ ajax.js
│ favicon.gif
│
├─templates
└─utils
- 1. Udostępnianie plików statycznych i multimedialnych Django od S3
- 2. 304 niezmodyfikowane w plikach statycznych
- 3. Zamęt w koncepcji OOP?
- 4. Lokalizacje szablonów i plików statycznych w Django
- 5. Kompresowanie JS i CSS w statycznych plikach HTML
- 6. Jak korzystać z Dropbox jako miejsca przechowywania plików multimedialnych Django?
- 7. Konfigurowanie htaccess do wyświetlania statycznych plików django
- 8. Django multimedialne adresy URL w plikach CSS
- 9. Struktura folderów statycznych w Django 1.4?
- 10. heroku i django: serwer nie ładuje plików statycznych
- 11. Apache nie obsługuje plików statycznych django admin
- 12. Zamęt na temat zakresu zmiennej CoffeeScript
- 13. języków statycznych i Reflection
- 14. Czy mogę podzielić modele w różnych plikach w django
- 15. Używanie statycznych plików na niestandardowych stronach 404/500 w Django
- 16. Django uzyskać adres URL plików statycznych w widoku
- 17. C# Alternatywa dla wirtualnych metod statycznych i podklatek statycznych
- 18. Przechwytywanie kluczy multimedialnych po zminimalizowaniu aplikacji
- 19. Przesyłanie strumieniowe plików multimedialnych za pomocą WebRTC
- 20. znaleźć wzór w plikach i ich nazwy
- 21. czytanie i wyszukiwanie tekstów w plikach pdf
- 22. Rozdzielanie statycznych plików i zasobów przy użyciu kompresora Django i użycia kolekstatycznego
- 23. Udostępnianie plików statycznych poziomu root na Heroku z Django?
- 24. Problemy z bezpieczeństwem podczas udostępniania plików statycznych za pośrednictwem Django?
- 25. Jak używać django-cumulus do serwowania plików statycznych?
- 26. Serwer django dev, dodając nagłówki do plików statycznych
- 27. Jak wyświetlić edytor arkuszy multimedialnych w Android Studio?
- 28. Django nie udostępnia plików statycznych, otrzymując błędy 404
- 29. Jak uruchomić JSHint na plikach z znacznikami szablonów Django?
- 30. @autowired w klasach statycznych
Warto zwrócić uwagę na to, że jeśli przypadkowo zapomnisz przecinka na końcu elementu STATICFILES_DIRS, program collectstatic zacznie kopiować wszystko zamiast tylko tego, co znajduje się w folderach statycznych. Zajęło mi to trochę czasu, więc pomyślałem, że o tym wspomnę. – Soviut