2010-04-28 13 views
6

Mam kilka projektów w Django i na przemian między nimi od czasu do czasu. Wszystkie mają ścieżkę/media/path, która jest obsługiwana przez django.views.static.serve, a wszystkie one mają plik /media/css/base.css.Jak zapobiec HTTP 304 w serwerze testowym Django

Problem polega na tym, że za każdym razem, gdy uruchamiam jeden projekt, żądania do base.css zwracają HTTP 304 (niezmodyfikowany), prawdopodobnie dlatego, że znacznik czasu się nie zmienił. Ale kiedy uruchamiam drugi projekt, zwracane jest to samo 304, co powoduje, że przeglądarka używa pliku buforowanego przez poprzedni projekt (a zatem używa niewłaściwego arkusza stylów).

Tak dla przypomnienia, oto klasy middleware:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.transaction.TransactionMiddleware', 
) 

Zawsze używam domyślnego adresu http://localhost:8000. Czy istnieje inne rozwiązanie (inne niż używanie różnych portów - 8001, 8002 itd.)?

+0

Witajcie @Augusto Men .Jeśli nie chcesz używać domyślnego portu 8000, możesz podać swój port no, używając komendy as-python manage.py runserver 8001 –

Odpowiedz

11

Można toczyć własną middleware dla że:

class NoIfModifiedSinceMiddleware(object): 
    def process_request(self, request): 
     request.META.pop('HTTP_IF_MODIFIED_SINCE', None) 

Zasadniczo, po prostu usuwa nagłówek HTTP_IF_MODIFIED_SINCE z żądania.

Pomyślnie: Lub możesz monkeypatch django.views.static.serve i zastąpić funkcję was_modified_since przez tę, która zawsze zwraca True.

+0

hello @alex vasi! Mam ten sam problem, proszę przeprowadź odpowiedź, aby dowiedzieć się, w jaki sposób mogę zastosować powyższy kod. –

+0

Przeczytaj na middlewareres, są one łatwe, a dokumenty django są niesamowite. W przypadku części "monkeypatch" wymagałoby to zlokalizowania miejsca zainstalowania modułu djagno, a następnie edytowania django/view/static/serve zgodnie z odpowiedzią. –

+0

Należy pamiętać, że po wstawieniu tego oprogramowania pośredniego musi to być pierwsze oprogramowanie pośredniczące na liście do działania. Dzięki za rozwiązanie! –

Powiązane problemy