Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2007 18:16:00

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Поля таблиц

Как бы вот пройтись for'ом по полям всей строчки в таблице.

Например есть стандартная модель User. Хочу сделать страничку где будут отображаться данные пользователя. Хотелось бы в таком виде

Имя: {{ user.first_name }}
Ник: {{ user.username }}

Но только вот во-превых хочу показывать только те поля в которых заполнены данные, а во вторых неохото для каждого поля создавать div в темплейте. Поэтому ищу путь что то в стиле
{% for i in user %}
<div class=“a”>{{ word }}: </div><div class=“b”>user.{{ fieldname }}</div>
{% endfor %}

где word например будет лист из в стиле
ну а fieldname это имя поля в модели User

Я понимаю что привёл не реальный пример, но так что бы народ понял чего мне надо получить я думаю он подойдёт.



Офлайн

#2 Сен. 15, 2007 19:31:47

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Поля таблиц

Тебе надо список полей возвращать самому. Проще всего медалть у модели метод, в ктором и возвращать все поля в нужном порядке.



Офлайн

#3 Сен. 16, 2007 11:38:17

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Поля таблиц

Daevaorn, а можешь привести пример как в классе создать метод и вызвать его? А то что то в документации непонятно это дело описано.. Может какой простенький примерчик у тебя есть?



Офлайн

#4 Сен. 16, 2007 13:29:43

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Поля таблиц

offline
Daevaorn, а можешь привести пример как в классе создать метод и вызвать его? А то что то в документации непонятно это дело описано.. Может какой простенький примерчик у тебя есть?
Вообще идеология джанги подразумевает что работая на уровне тимплейта, програмер не должен вызывать методы.
Данные должны приехать в тимплейт в разжеванном виде. Разжевать можно с помощью менеджеров, а окончательную обработку - самописными тегами.
Но в целях граблеловления конешно могу дать такой пример, как ты просишь :)

##models.py##
from django.db import models

class Slot(models.Model):
“”“”“”
short=models.CharField()
serial=models.PositiveIntegerField()

def __str__(self):
return “%s-%04u”%(self.short,self.serial)

def hello(self):
return “%s says ‘Hello world’!”%self.__str__()

##views.py##
from django import http
from django.shortcuts import render_to_response

def test(request):

resp=render_to_response(“example.xml”,{“slots”:Slot.objects.all()})
return resp

##example.xml##
{% extends “somebase.xml” %}
{% block content %}
{% for slot in slots %}
<p>{{slot.hello}}</p>
{% endfor %}

{% endblock %}



Отредактировано (Сен. 16, 2007 13:32:06)

Офлайн

#5 Сен. 16, 2007 15:48:32

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Поля таблиц

denz
Вообще идеология джанги подразумевает что работая на уровне тимплейта, програмер не должен вызывать методы.
если учесть что обращение к FоreignKey полю объекта уже вызов метода, то какая-то странная идеология. да, парметры в методы нельзя передавать, но етоды вызывать можно и нужно. раньше, да и сейчас очень большой популярностью в шаблонах пользуется метод get_absolute_url :)



Офлайн

#6 Сен. 16, 2007 15:58:01

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Поля таблиц

offline
а можешь привести пример как в классе создать метод и вызвать его? А то что то в документации непонятно это дело описано.. Может какой простенький примерчик у тебя есть?
здесь вроде всё понятно http://www.djangoproject.com/documentation/model-api/#id8 . Модель ведь обычной python класс следовательно и методы в нем объявлются так же.
тут про вызов написано http://www.djangoproject.com/documentation/templates/#variables, А вот как вариант метода, возвращающего по очереди поля:
class MyModel(models.Model):
    #....
    def get_fields(self):
        fields = [ field.name for field in MyModel._meta.fields ]
        for field in fields:
            yield field, getattr( self, field )



Отредактировано (Сен. 16, 2007 21:02:45)

Офлайн

#7 Сен. 16, 2007 17:28:48

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

Поля таблиц

        fields = [ field.name for field in MyModel._meta.fields ]
for field in fields:
Почему б не просто:
       for field in MyModel._meta.fields:



Офлайн

#8 Сен. 16, 2007 17:35:17

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Поля таблиц

nss
Почему б не просто:
потому что автору нужны поля и их значения, а не только сами объекты полей, которые значения не хранят и существуют одни на все инстансы модели.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version