Поиск

Найдены 15 статей по слову "django"

"Читать далее" в django

Часто бывает нужно организовать новости, блог, какие-то статьи. Для этого обычно используют небольшой вступительный текст и ссылку “Читать далее”.

Если вы используете HTML-тэги в своих статьях, то заметите, что Django не закрывает их при использовании фильтра truncatewords.

Пример реализации
Если вы хотите запретить HTML-тэги только в этом вступительном тексте, а также картинки, видео и прочее, то можно пойти следующим путем. В необходимом файле шаблона, в требуемой переменной примените фильтр striptags, затем truncatewords, затем safe (для правильной обработки HTML-символов):

{{ news.description|striptags|truncatewords:"30"|safe }}

Получится, например, такой текст - “Как все мы помним, после The International все датские игроки из MYM покинули эту организацию и им на замену была взята команда Scythe.SG. Вчера стало известно, что состав снова претерпел серьезные …”. Протестировано на Django 1.3.

Также, если у вас пробелы представлены в виде  , то приведенный выше метод может не работать. Для решения проблемы используйте фильтр truncatewords_html. Таким образом, код будет вида:

{{ news.description|truncatewords_html:"30"|safe }}

Как видите, мы еще убрали фильтр striptags.

django

Уникальные названия файлов при загрузке в Django

Django при сохранении файла через админку или форму сохраняет название файла. Например, при загрузке картинки "mypic.jpg" она сохранится с этим названием.
Также, если загружаемый файл на русском языке, то его имя будет сохранено - “моя_картинка.jpg”. Вы можете изменить этот механизм.

ПРИМЕЧАНИЕ. Последующие загружаемые файлы с таким названием будут иметь префикс "_", т.е. "_mypic.jpg", "__mypic.jpg" и т.п.

Пример реализации
Этот код должен быть помещен в файл models.py нужного вам приложения.

import os, uuid

def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join(instance.directory_string_var, filename)

class MyModelFiles(models.Model):
    myimage = models.FileField(upload_to = get_file_path)
    directory_string_var = 'my-path-to-files-for-this-model'

class MyModelImages(models.Model):
    myimage = models.ImageField(upload_to = get_file_path)
    directory_string_var = 'my-path-to-images-for-this-model'

Таким образом, при следующей загрузке файла его имя будет выглядеть, например, так «384408e1-5465-46fd-bf47-61f913fa78e5.jpg».
Протестировано на версии Django 1.3.

django

Как получить список заголовков столбцов в модели django

Получаем список всех имен столбцов модели

model_field_names = model._meta.get_all_field_names()

Получаем название модели

model_name = model._meta.getattr()
django

Парсер веб-страниц на Python

Для успешного парсинга страниц достаточно двух инструментов - urllib и BeautifulSoup. Первый обычно доступен сразу после установки python, второй легко можно найти в интернете - http://www.crummy.com/software/BeautifulSoup/bs3/download/

Пример

>>> from BeautifulSoup import BeautifulSoup
>>> import urllib
>>> f = urllib.urlopen('http://my.site') # Открываем сайт, который будем парсить
>>> soup = BeautifulSoup(f.read()) # Считываем его и одновременно закидываем в BeautifulSoup
>>> my = soup.findAll(name='div', attrs={'class': 'news'}) # Ищем все div`ы с классом 'news'
>>> for m in my:
... print m # Выводим их

Результат, например, может быть следующий (если найден только один div):

[u'Содержание статьи 1.']

По шагам

<span>1</span>. Качаем BeautifulSoup.tar.gz, который лежит в корне.

<span>2</span>. Распаковываем gz, затем tar.

<span>3</span>. Копируем в папку (желательно без русских символов и пробелов).

<span>4</span>. Устанавливаем:

 Нажимаем Ctrl+R
 cmd
 cd C:\BeautifulSoup-3.2.1
 python setup.py install

<span>5</span>. Должно успешно установиться. Теперь можем испытать скрипт. Заходим в python:

>>> from BeautifulSoup import BeautifulSoup
>>> import urllib
>>> f = urllib.urlopen('http://my.site') # Открываем сайт, который будем парсить
>>> soup = BeautifulSoup(f.read()) # Считываем его и одновременно закидываем в BeautifulSoup
>>> my = soup.findAll(name='div', attrs={'class': 'news'}) # Ищем все div`ы с классом 'news'
>>> for m in my:
...    print m.findAll(text=True) # Выводим их

<span>6</span>. В результате должны были получить содержимое всех div c классом news.

django

Делаем правильные имена загружаемых картинок в django

Как известно, джанго при загрузке файла сохраняет его имя. Т.е. в имени файла вполне могут быть русские буквы - мы от этого не защищены. Я считаю, что лучше организовать изображения на сайте по хэшам или uuid. Это делается довольно просто, благодаря тому, что в джанго путь к картинке и имя файла можно генерировать функцией.

Давайте посмотрим, как это сделать.

import os, uuid

def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join(instance.directory_string_var, filename)

    class MyModel(models.Model):
    myimage = models.FileField(upload_to = get_file_path)
    directory_string_var = 'my-path-to-images-for-this-model'

Таким образом, при следующей загрузке файла его имя будет выглядеть, например, так “384408e1-5465-46fd-bf47-61f913fa78e5.jpg”.

Встретился с данным решением на интересном англоязычном ресурсе stackoverflow.

django