Работаю с 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 %}
УдалитьЭто работало, но не есть хорошо)