Работаю с django совсем недавно. но уже успел полюбить его. Чего стоит только модуль работы с формами. Покажу его работу на примере простой модели:
Создали модель с тремя полями. Обратите внимание, что третье поле- это поле для загрузки фотографии. Имеет один обязательный атрибут "upload_to"(и еще несколько необязательных, их смотрите в офф. документации). В нем указываете папку, в которую грузить файлы/изображения. Сама папка должна находится в вашем MEDIA_ROOT, указанном в settings.py. Теперь нам нужно создать под это дело форму. Тут то и проявляется вся прелесть django. Если у нас есть модель, нам не надо описывать каждое поле, а просто укажем нужную нам модель и форма сгенерируется сама. Вот содержимое forms.py:
class UserProfile(models.Model): login = models.CharField(max_length = 255, verbose_name=u'Логин') password = models.CharField(max_length = 255, verbose_name=u'Пароль') photo = models.ImageField(upload_to='profiles', verbose_name=u'Фото')
Создали модель с тремя полями. Обратите внимание, что третье поле- это поле для загрузки фотографии. Имеет один обязательный атрибут "upload_to"(и еще несколько необязательных, их смотрите в офф. документации). В нем указываете папку, в которую грузить файлы/изображения. Сама папка должна находится в вашем MEDIA_ROOT, указанном в settings.py. Теперь нам нужно создать под это дело форму. Тут то и проявляется вся прелесть django. Если у нас есть модель, нам не надо описывать каждое поле, а просто укажем нужную нам модель и форма сгенерируется сама. Вот содержимое forms.py:
from django import forms #сам модуль from project.app.models import * #импортируем модели class UserForm(forms.ModelForm): class Meta: model = UserProfile #указываем модель из которой генерируем формуДалее создаем функцию в views.py
def user_add(request): if request.method == 'POST': form = UserForm(request.POST, request.FILES) # не забываем, что нам нужно еще и файл сохранить if form.is_valid(): form.save() # сохраняем модель в БД else: form = UserForm(request.POST, request.FILES) else: form = UserForm return render_to_response('file_form.html', locals(), context_instance=RequestContext(request)) #указываем шаблонВСЁ! В шаблоне достаточно прописать
<form method="POST" action="" enctype="multipart/form-data">{% csrf_token %} <table> {{ form }} </table> <input type="submit" value="Отправить" /> </form>и получим нашу форму для заполнения полей.
почему форма может не подтягиваться в шаблоне?
ОтветитьУдалитьКак шаблон генерируешь? Какой контекст передаешь в него?
Удалитьполностью скопипастил, а выводится ток кнопка отправить, а формы нет
ОтветитьУдалитьВот здесь архив с этим примером. У себя только что проверил, все работает.
Удалитьспасибо за пример!!
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьа выгрузку файлов ты не реализовывал?
ОтветитьУдалитьВсмысле "выгрузку"? Откуда выгружать?)
Удалитья хочу на странице загружать и выгружать файлы..Мои задумки:будет грид с таблицей где будет высвечиваться например таблица Userprofiles.внизу кнопка добавить пользователя и не знаю может еще кнопка выгрузить фотографию пользователя где в поле буду указывать id его или обработать щелчок мышки по гриду чтобы скачать именно что нужно..Подскажи как реализовать легче?может есть примеры..
УдалитьВыгрузка - это, как я понял, скачивание, так? Ну делаешь таблицу, задаешь нужный стиль и выводишь в шаблоне всех пользователей через шаблонный тег {% for %}
Удалитьнет я хочу с сайта скачать фотографии пользователей..через шаблонный тег {% for %} я же просто выведу данные в таблицу на страницу..или я недопонимаю что-то?
УдалитьНу выводишь таблицу вида:
Удалить<table>
{% for u in users %}
<tr><td>{{ u.login }}</td><td><a href="{{ u.photo.url }}">Скачать фото</a></td></tr>
{% endfor %}
</table>
Где users - это пользователи из базы.
Удалитьа примера нет тестового?
ОтветитьУдалитьНет. Дополни тот, что я заливал :) Это не трудно.
Удалитьно эта ссылка получается нерабочей..
ОтветитьУдалитьThe current URL http://127.0.0.1:8000/files/ss.doc
didn't match any of these.
А раздачу статики настроил?
Удалитьнет..нужно еще что-то прописать в setting.py
ОтветитьУдалитьАга. Почитай в официальной документации на djbook.ru про это :) Там все подробно расписано. Вот тут я ответил что в urls.py прописывать
Удалитьспасибо за наводку
ОтветитьУдалитьвсе получилось...а в dojo grid ты не выводил данные из таблиц?
ОтветитьУдалитьНе, я с dojo вообще не знаком. Пользуюсь jQuery, пока хватает :) Еще, говорят, ExtJS клевый. Там тоже grid'ы есть.
Удалитьрешил dojo опробовать...но с предыдущим получается что файл мы не скачиваем а открываем..или еще что то не дописал?
ОтветитьУдалитьхотя это проблема ток txt и html..
ОтветитьУдалитьНу, это у тебя так браузер устроен :) Он по умолчанию открывает их. Запихай в zip архив, например.
Удалитьа активным пунктом меню на django ты не занимался?
ОтветитьУдалитьДелал. Но не совсем правильно. В каждом пункте меню писал что то вида {% if page == 1 %} class="active" {% endif %}
УдалитьЭто работало, но не есть хорошо)