Фон:
Я начинаю использовать Django впервые, который является также моим первым набегом в веб-разработку. Я просто застрял на целых "служащих статических медиа" проблема. После расходов некоторое время смотрящий на всю документацию и вопросы о StackOverflow, я думаю, что понимаю, как это, как предполагается, работает (т.е. MEDIA_ROOT, MEDIA_URL, обновляя файл URL, и т.д.).
Мой вопрос:
Хорошо, таким образом, вот часть, я не уверен в. Приложения Django, как предполагается, являются "сменными", т.е. Я могу переместить приложение от одного проекта до другого. Так, как эти приложения должны связать статические медиа?
Например, скажем, у меня есть приложение "нечто", которое имеет шаблоны, которые загружают некоторые css/image файлы. Где я, как предполагается, помещаю эти файлы, так, чтобы они были автоматически поданы, как только я включаю приложение?
Единственное решение, которое я вижу, это устанавливающее приложение должно включать дополнительный шаг копирования его статических медиа к некоторому месту на Вашем собственном сервере, который служит этому медиа.
Действительно ли это - принятый способ сделать это? Это включает дополнительный шаг, но возможно это стандартно при контакте с сетью-dev (я являюсь новым, таким образом, я действительно не знаю).
Кроме того, если это - путь, есть ли стандартный способ собрать все мои статические медиа, чтобы помочь знать то, чему я должен служить? (Т.е. действительно ли это стандартно, чтобы иметь папку, названную "медиа" или чем-то в приложении?).
Спасибо,
Конвенция состоит в том, чтобы поставить статический носитель в среду / appname / или статическое / appname / в приложении (аналогично шаблонам).
Для использования приложений в вашем проекте поставляется с носителями, я настоятельно рекомендую использовать Django-StaticFiles . Он автоматически обслуживает средства массовой информации (включая СМИ в приложениях) в разработке через представление, которое заменяет django.views.static.serve, и он поставляется с командой Build_Static Management, которая будет копировать носитель из всех приложений в один каталог для обслуживания в производстве.
Обновление : Django-StaticFiles становится частью Django 1.3 . Теперь он ожидает App Media, чтобы жить в «статическом /» подкаталоге приложений, а не «медиа /». И команда управления сейчас «коллекционирование».
Вы можете использовать Крюк мыши низкого уровня. См. IS Пример и проверьте на MESAGE WM_MOUSEMOVE в HoodCallback.
Вы также можете использовать класс IMESSAGEFILTER, чтобы поймать события мыши и вызвать событие, чтобы получить позицию (Примечание: это только получит позицию над окном, не снаружи этого):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace GlobalMouseEvents
{
public partial class Form1 : Form
{
public Form1()
{
GlobalMouseHandler gmh = new GlobalMouseHandler();
gmh.TheMouseMoved += new MouseMovedEvent(gmh_TheMouseMoved);
Application.AddMessageFilter(gmh);
InitializeComponent();
}
void gmh_TheMouseMoved()
{
Point cur_pos = System.Windows.Forms.Cursor.Position;
System.Console.WriteLine(cur_pos);
}
}
public delegate void MouseMovedEvent();
public class GlobalMouseHandler : IMessageFilter
{
private const int WM_MOUSEMOVE = 0x0200;
public event MouseMovedEvent TheMouseMoved;
#region IMessageFilter Members
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_MOUSEMOVE)
{
if (TheMouseMoved != null)
{
TheMouseMoved();
}
}
// Always allow message to continue to the next filter control
return false;
}
#endregion
}
}
-121--2387567- Единственное приложение, которое я знаю, о том, с этим сделки с этим без какого-либо вмешательства является довольно замечательным Django-debug-панелью-панелью , хотя это утверждается, что это не отличный пример, так как это приложение Специально предназначен только для режима отладки.
Как оно касается этого, заключается в том, что оно служит средств массовой информации через сам Джанго - посмотреть источник для URLS.PY :
url(r'^%s/m/(.*)$' % _PREFIX, 'debug_toolbar.views.debug_media'),
В общем, это плохое представление (вы не хотите Подавать статические файлы через Django), на этот комментарий из документации :
[Обслуживание статических файлов через Django] неэффективно и ненадежный. Не используйте это в Обстановка производства. Использовать это только для разработка.
Очевидно, что Django-debug-панель инструментов используется только для разработки только, поэтому я думаю, что его метод развертывания имеет смысл, но это очень, это исключение.
В целом, лучший способ, которым я знаю, для создания символических ссылок, где ваши медиа хранится в носителях внутри вашего приложения. Например, создайте папку под названием Media
в вашем приложении, а затем требуют, чтобы пользователи устанавливали свое приложение для добавления символической ссылки от их медиа-каталога или скопируйте все это.
Я обычно устанавливаю Apps Media в ./apps/appname/Static (мои приложения находятся в подпапке приложений)
, то у меня есть что-то похожее в Vhost в Apache:
AliasMatch ^/apps/([^/]+)/static/(.*) /home/django/projectname/apps/$1/static/$2
<DirectoryMatch "^/home/django/projectname/apps/([^/]+)/static/*">
Order deny,allow
Options -Indexes
deny from all
Options +FollowSymLinks
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|txt|htm|html|json)$">
allow from all
</FilesMatch>
</DirectoryMatch>
У меня также есть это в моем URLS.PY для SEV Server (используйте только для отладки):
def statics_wrapper(request, **dict):
from django.views import static
return static.serve(request, dict['path'], document_root = os.path.join(settings.BASE_DIR, 'apps', dict['app'], 'static'), show_indexes=True)
urlpatterns += patterns('', (r'^apps/(?P<app>[^/]+)/static/(?P<path>.+)$', statics_wrapper))
Это очень удобно, потому что URL-адрес статики просто отображается на файловую систему, например:
http: //wwww.epample. COM / Apps / Calendar / Static / JS / Calendar.js находится в [BASE_DIR] /Apps/Calendar/Static/js/calendar.js
Надеюсь, это поможет