вторник, 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. Для этого её необходимо выгрузить из джанго и щзарегать снова. Но как показывает опыт, при таком отображении локально все работает отлично, при закгрузке на сервер под Апачем, а именно, ссылка то проподает, то появляется снова, то админка не грузиться.

Комментариев нет:

Отправить комментарий