пятница, 29 апреля 2011 г.

Вывод изображений на страницу


    Сейчас я расскажу как выводить изображения на страницу, для их просмотра. Для начала нужно создать модель, с необходимыми полями. В данном случае используется модель, представленная  здесь.

views.py:

#берем все изображения, закаченные текущим пользователем
puser = User.objects.get(name=request.user)
images = Image.objects.filter(namer=puser.id)

#необходимо для корректного отображения, чтобы не возникало csrf-ошибки
context = {'images': images}
context.update(csrf(request))
#возвращаем значение со страницей и картинками
return render_to_response('reg_inf/base_index.html', context)


   Далее, в html -коде, пишем:

<form method="post">

{% csrf_token %}

<body>

<table class="t_img">
   {% for img in images %}
      {% if forloop.counter0|divisibleby:"3" %}
      <tr width=151>
      {% endif %}
            <td align="char">
                      <img id="img-{{ img.nomer }}" src='{{ img.mini.url }}' />         
</td>
      {% if forloop.counter|divisibleby:"3" %}
      </tr>
      {% endif %}
{% endfor %}
</table>

</body>
</form>

    {% if forloop.counter0|divisibleby:"3" %} - используется для вывода по три картинки(миниатюры) в строку

вторник, 26 апреля 2011 г.

Отображение файла журнала в джанговской Админке


   В предыдущей статье было описано как реализовать журнал действий пользователь. Здесь будет рассмотрено как просмотреть журнал в админке.

   Для начала, сама процедура отображения содержимого файла.
views.py:

def log(request, userid):
    #по идентификатору выбираем строку из БД с данными о текущем пользователе
    user = LogUser.objects.get(id=userid)
    username = user.name
    #указываем путь к фалу лога пользователя
    url = settings.LOG_FILE_PATH.format(user=username) #MEDIA_ROOT+log.log'
    #считываем информацию из файла
    f = open(url, 'r')
    log = f.readlines()
    #создаем переменную лога для передачи на html страницу
    context = {'log_lines': log}
    return render_to_response('reg_inf/user_log.html', context)

После подключения админки (расскобить две строки в урлах:)), в файле models.py, пишем:

from django.contrib import admin
#импортируем Стандартную джанговскую модель User
#как с ней работать написано здесь 
from django.contrib.auth.models import User
#модель, для отображения имени юзера и поля лога
from reg_inf.models import LogUser

from django.contrib.auth.admin import UserAdmin

#импортируем процедуру из views.py
from reg_inf.views import log

admin.autodiscover()

#процедура, для отображения ссылки в админке на файл лога
def user_view_log_link(user):
    #id юзека, для определения имени в БД
    p = user.id
    #возвращаем ссылку, при нажатии на которую, вызывается процедура log
    #ей передается id юзера, на против которого была нажата ссылка
    return '<a href="%s">:Журнал</a>' % reverse(log, args=[p])

#создаем дополнительное поле для ссылки
user_view_log_link.allow_tags = True

#создаем класс, для отображения в админке
class MyUser(admin.ModelAdmin):
  list_display = ('name', user_view_log_link,)
#регистрируем модель LogUser как потомка MyUser
admin.site.register(LogUser, MyUser)

Для корректной передачи id юзера, необходимо записать в url.py:

urlpatterns = patterns('reg_inf.views',
    (r'^log/(?P<userid>\d+)$', 'log'),


   Конешно можно было отобразить ссылку на файл прямо в стандартной модели User. Для этого её необходимо выгрузить из джанго и щзарегать снова. Но как показывает опыт, при таком отображении локально все работает отлично, при закгрузке на сервер под Апачем, а именно, ссылка то проподает, то появляется снова, то админка не грузиться.