#python #django #web-applications #frameworks
#python #django #веб-приложения #фреймворки
Вопрос:
Я пытаюсь создать проект Django с возможностью редактирования.
С чем у меня возникают проблемы, так это с выяснением того, как я могу обслуживать файлы из каталога skin, а не из каталога media, чтобы все изображения / css / js-файлы skin могли находиться в папках skin.
Пользователь должен иметь возможность выбирать имя обложки, предпочтительно, изменяя только переменную SKIN_NAME в ‘settings’ (и, возможно, позже файл .ini). И все шаблоны / css / изображения будут загружены из этого каталога.
Я полагаю, что возможность просмотра необработанных шаблонов была бы плохой, поэтому, возможно, это должен быть каталог ‘media’ внутри папки skin, с вложенными папками ‘css’, ‘js’ и ‘images’ внутри, и он будет обслуживаться оттуда.
Я довольно новичок в Django Framework, хотя у меня есть некоторый опыт работы с Python, поэтому я был бы очень признателен за любую информацию о том, как это делается / может быть сделано.
Ответ №1:
Во-первых, вам лучше хранить свои статические файлы в static
папке и использовать только media
для загруженного контента.
Тогда в вашей static
папке у вас могла бы быть папка для каждого вашего скина, содержащая все необходимые CSS, изображения и JS.
Из вашего шаблона обложки просто импортируйте файлы с префиксом {{ STATIC_URL }} и вашим именем обложки.
<link rel="stylesheet" src="{{ STATIC_URL }}name_of_your_skin/css/style.css" />
Если вашим скинам не нужен отдельный шаблон, вы могли бы даже сделать :
<link rel="stylesheet" src="{{ STATIC_URL }}{{ skin_name }}/css/style.css" />
Комментарии:
1. Теперь в файле ‘settings’ я вижу, что MEDIA_ROOT предназначен для загруженных файлов. Но как мне задать статический путь, чтобы django мог обслуживать из него? Я могу найти только MEDIA_ROOT, который соответствует этому описанию.
Ответ №2:
Когда пользователь выбирает имя «skin», измените MEDIA_ROOT в своем файле настроек.
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) #assuming your settings file is in your project root
TEMPLATE_NAME = 'my_template'
MEDIA_ROOT = os.path.join(PROJECT_ROOT, "media", TEMPLATE_NAME)
print MEDIA_ROOT
# /path/to/project/media/my_template/
В дальнейшем, если это изменится на настраиваемую переменную настроек, которая будет изменена в Admin, вы, вероятно, могли бы достичь того же результата с помощью промежуточного программного обеспечения, которое изменяет значение MEDIA_ROOT.