Как позволить пользователю переключаться между цветовыми темами в Django
Итак, я работаю над сайтом на Django и хочу, чтобы посетители сайта могли нажать на нужную им тему. Я смог сделать это с помощью чистого Html/css и Javascipt, но теперь, когда я перенес все в Django, это не работает. Я думаю, может быть, это моя установка пути. Вот код в моем index.html
<h5 style="text-align: center;line-height: 0;">Personalize Theme</h5>
{% load static %}
<script type="text/javascript" src="../../static/pythonicThinking/script.js"></script>
<div id="theme-options-wrapper">
<div data-mode="light" id="light-mode" class="theme-dot" ></div>
<div data-mode="blue" id="blue-mode" class="theme-dot"></div>
<div data-mode="green" id="green-mode" class="theme-dot"></div>
<div data-mode="purple" id="purple-mode" class="theme-dot"></div>
</div>
<p id="settings-note">*Theme settings will be saved for<br>your next visit</p>
</div>
файл javacript
console.log('Its working')
let theme = localStorage.getItem('theme')
if(theme == null){
setTheme('light')
}else{
setTheme(theme)
}
let themeDots = document.getElementsByClassName('theme-dot')
for (var i=0; themeDots.length > i; i++){
themeDots[i].addEventListener('click', function(){
let mode = this.dataset.mode
console.log('Option clicked:', mode)
setTheme(mode)
})
}
function setTheme(mode){
if(mode == 'light'){
document.getElementById('theme-style').href = 'default.css'
}
if(mode == 'blue'){
document.getElementById('theme-style').href = 'blue.css'
}
if(mode == 'green'){
document.getElementById('theme-style').href = 'green.css'
}
if(mode == 'purple'){
document.getElementById('theme-style').href = 'purple.css'
}
localStorage.setItem('theme', mode)
}
файл setting.py
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
файл urls.py from django.views.generic import RedirectView
urlpatterns = [
path('admin/', admin.site.urls),
path('pythonicthinking/', include('pythonicthinking.urls')),
]
urlpatterns += [
path('', RedirectView.as_view(url='pythonicthinking/', permanent=True)),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
файл views.py from django.shortcuts import render
def home(request):
return render(request, 'pythonicthinking/index.html')
Мой defualt css работает, но когда я пытаюсь нажать на кнопки, чтобы изменить, я получаю эту ошибку
Refused to apply style from 'http://127.0.0.1:8000/pythonicthinking/purple.css' because its
MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is
enabled
Я понял вашу проблему.
1-е: url статического файла недействителен. Вы должны увидеть 404 в консоли. 2. Рекомендуется отрисовывать определенную тему вместо того, чтобы применять ее на стороне клиента. Это может быть сделано с помощью куки сессии.
- Создание настраиваемых таблиц стилей и их рендеринг на сервере в зависимости от темы