Как Django Apps должен связать статические медиа?

Фон:

Я начинаю использовать Django впервые, который является также моим первым набегом в веб-разработку. Я просто застрял на целых "служащих статических медиа" проблема. После расходов некоторое время смотрящий на всю документацию и вопросы о StackOverflow, я думаю, что понимаю, как это, как предполагается, работает (т.е. MEDIA_ROOT, MEDIA_URL, обновляя файл URL, и т.д.).

Мой вопрос:

Хорошо, таким образом, вот часть, я не уверен в. Приложения Django, как предполагается, являются "сменными", т.е. Я могу переместить приложение от одного проекта до другого. Так, как эти приложения должны связать статические медиа?

Например, скажем, у меня есть приложение "нечто", которое имеет шаблоны, которые загружают некоторые css/image файлы. Где я, как предполагается, помещаю эти файлы, так, чтобы они были автоматически поданы, как только я включаю приложение?

Единственное решение, которое я вижу, это устанавливающее приложение должно включать дополнительный шаг копирования его статических медиа к некоторому месту на Вашем собственном сервере, который служит этому медиа.

Действительно ли это - принятый способ сделать это? Это включает дополнительный шаг, но возможно это стандартно при контакте с сетью-dev (я являюсь новым, таким образом, я действительно не знаю).

Кроме того, если это - путь, есть ли стандартный способ собрать все мои статические медиа, чтобы помочь знать то, чему я должен служить? (Т.е. действительно ли это стандартно, чтобы иметь папку, названную "медиа" или чем-то в приложении?).

Спасибо,

13
задан Edan Maor 14 January 2010 в 12:15
поделиться

3 ответа

Конвенция состоит в том, чтобы поставить статический носитель в среду / appname / или статическое / appname / в приложении (аналогично шаблонам).

Для использования приложений в вашем проекте поставляется с носителями, я настоятельно рекомендую использовать Django-StaticFiles . Он автоматически обслуживает средства массовой информации (включая СМИ в приложениях) в разработке через представление, которое заменяет django.views.static.serve, и он поставляется с командой Build_Static Management, которая будет копировать носитель из всех приложений в один каталог для обслуживания в производстве.

Обновление : Django-StaticFiles становится частью Django 1.3 . Теперь он ожидает App Media, чтобы жить в «статическом /» подкаталоге приложений, а не «медиа /». И команда управления сейчас «коллекционирование».

9
ответ дан 2 December 2019 в 00:46
поделиться

Вы можете использовать Крюк мыши низкого уровня. См. 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 в вашем приложении, а затем требуют, чтобы пользователи устанавливали свое приложение для добавления символической ссылки от их медиа-каталога или скопируйте все это.

2
ответ дан 2 December 2019 в 00:46
поделиться
-

Я обычно устанавливаю 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

Надеюсь, это поможет

2
ответ дан 2 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: