Что не так с этим Django кодом для шаблона и модели - PullRequest
0 голосов
/ 06 марта 2020

, поэтому я пытаюсь создать динамические c страницы с Django. У меня уже есть ввод данных «имя», «фон» и «введение» на странице администратора. И теперь я пытаюсь показать это моей странице "... / index". Но это не работает.

Это код python для models.py

class UserInfo(models.Model):
    name = models.CharField(max_length = 10)
    background = models.CharField(max_length=30)
    introduction = models.CharField(max_length = 60)

, и в моем файле views.py у меня есть это:

def index(request):
    user = UserInfo.objects.all()
    return render(request, 'index.html', {'user' : user})

и, наконец, в моем файле 'index. html' у меня есть это:

<p>{{user.name}}</p>
<p>{{user.background}}</p>
<p>{{user.introduction}}</p>

Так что эти коды должны показывать мне имя, фон и введение в '... / index 'страница, но она ничего не показывает. Я не понимаю, что я сделал не так.

Я очень ценю вашу помощь. :) Спасибо.

Ответы [ 3 ]

3 голосов
/ 06 марта 2020

Ваша переменная user представляет собой список пользователей, поэтому вам нужно повторить ее в своем шаблоне

{% for item in user %}
    <p>{{item.name}}</p>
    <p>{{item.background}}</p>
    <p>{{item.introduction}}</p>
{% endfor %}

или получить указанного c пользователя в index()

def index(request):
    user = UserInfo.objects.get(pk = your_user_pk)
    return render(request, 'index.html', {'user' : user})

тогда ваш шаблон должен работать

<p>{{user.name}}</p>
<p>{{user.background}}</p>
<p>{{user.introduction}}</p>
1 голос
/ 06 марта 2020

UserInfo.objects.all() вернет объект QuerySet, а не один экземпляр.

Если вы просто хотите отобразить одного пользователя на основе последнего идентификатора, вы можете сделать следующее:

def index(request):
    user = UserInfo.objects.latest('id')
    return render(request, 'index.html', {'user' : user})

Если вы хотите отобразить всех пользователей на своей странице, как предложено @weAreStarDust , вы можете сделать (переименуйте user в users в вашем views.py, чтобы избежать путаницы)

{% for user in users %}
    #Do Something with user
    <p>{{user.name}}</p>
    <p>{{user.background}}</p>
    <p>{{user.introduction}}</p>
{% endfor %}
1 голос
/ 06 марта 2020

UserInfo.objects.all () возвращает список, поэтому вы должны взять первый элемент, используя first ()

def index(request):
    user = UserInfo.objects.all().first()
    return render(request, 'index.html', {'user' : user})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...