2016-06-09 4 views
2

Справочная информация. Я использую сервер jango manage.py для локальной разработки. У меня есть contrib.staticfiles в установленных приложениях, и я использую свой тег шаблона {% static%} в моих шаблонах.Как использовать удаленный статический файловый сервер при разработке с помощью django manage.py runningerver

Что я пытаюсь достичь: для разработки я хотел бы использовать независимый сервер для обслуживания статических файлов, но использовать сервер разработки django для обслуживания приложения Django. Чтобы я мог получить доступ к странице локально на своем компьютере по адресу http://127.0.0.1:8000, но все статические файлы будут обслуживаться с другого компьютера или с другого сервера на локальном хосте, как определено параметром settings.STATIC_URL.

Проблема: переменная settings.STATIC_URL переопределяется, когда я использую сервер разработки. Таким образом, все мои статические файлы обслуживаются локальным сервером разработки django вместо того, что я определил в settings.STATIC_URL.

Решение: см. Ниже ответ Даниила!

settings.py:

import os 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
STATIC_ROOT = os.path.join(BASE_DIR, 'static/') 
STATIC_URL = os.path.join('127.0.0.1:666', BASE_DIR, 'static/') 

example_template.html:

{% load staticfiles %} 
{% load bootstrap3 %} 
{% bootstrap_css %} 
{% bootstrap_javascript jquery=True%} 
{% bootstrap_messages %} 

{# Load MyApp CSS #} 
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700subset=greek-ext,vietnamese,cyrillic-ext,latin-ext' rel='stylesheet' type='text/css'> 
<link href="{% static 'css/my_app.main.css' %}" rel="stylesheet"> 

исходный код страницы при использовании браузера:

<link href="FULL_PATH_TO_BASE_DIR_HERE/static/css/my_app.main.css" rel="stylesheet"> 

но ожидал увидеть:

<link href="127.0.0.1:666/FULL_PATH_TO_BASE_DIR_HERE/static/css/my_app.main.css" rel="stylesheet"> 
+0

Нет, URL-адрес не переопределяется, если вы не сделаете это самостоятельно. Пожалуйста, покажите соответствующие части вашего файла настроек и виды/шаблоны, в которых вы используете это значение. –

+0

Надеюсь, это содержит необходимые строки! Я получаю доступ к статическим файлам из своих шаблонов, используя тег {% static%} (я не получаю доступ к ним из своих представлений). – zenperttu

+0

Вы пытались удалить 'django.contrib.staticfiles' с вашего' INSTALLED_APPS'? –

ответ

2

Это не связано с Django или сервером. Это просто потому, что вы используете os.path.join() для присоединения к домену и пути; что функция не знает URL-адреса, и будет считать, что с base_dir начинается с слэш, он должен нормализовать весь путь, чтобы начать оттуда, и игнорировать все предыдущие:

>>> os.path.join('127.0.0.1', '/foo', 'static') 
'/foo/static' 

Решения двояко: Дон» t используйте os.path.join по URL-адресам, но что более важно, не используйте BASE_DIR в STATIC_URL. Каталог файловой системы, в котором хранятся ваши статические файлы, не имеет никакого отношения к URL-адресу, на котором они выставлены. Ваш STATIC_URL должен быть чем-то вроде «http://127.0.0.1:666/static/».

+0

Эй, рад, я задал этот вопрос здесь! Потребовал бы меня, чтобы понять это! Я почему-то думал, что я os.path.join делает то, что делает os.sep.join. Также очень полезно указать, как сопоставление URL-адресов с файловой системой не является 1: 1. Здесь я обслуживал всю свою файловую систему, начиная с root на localhost, чтобы я мог использовать полный абсолютный путь к моей папке, думая, что это поможет мне решить эту проблему. Определенно это не будет сделано в производстве! :) Спасибо! – zenperttu

Смежные вопросы