Как извлечь данные из mysql и отобразить их в виде, используя django - PullRequest
0 голосов
/ 03 февраля 2020

Вот моя модель:

  from django.db import models

    # Create your models here.
    class Contact(models.Model):
        name = models.CharField(max_length=125, null=True)
        email = models.EmailField()
        address = models.CharField(max_length=255)
        city = models.CharField(max_length=150)
        zipcode = models.CharField(max_length=15)

Я пытаюсь отобразить данные в виде:

<div class="row d-block">
    <table class="table table-responsive">



  <thead>
            <tr>
                <th>Name:</th>
                <th>Email:</th>
                <th>Address:</th>
                <th>City:</th>
                <th>Zipcode:</th>
            </tr>

        </thead>
    <tbody>
        {% for row in rows%}
        <tr>
            <th>{{rows.name}}</th>
            <th>{{rows.emai}}</th>
            <th>{{rows.address}}</th>
            <th>{{rows.city}}</th>
            <th>{{rows.zipcode}}</th>
        </tr>
        {%endfor%}
    </tbody>
</table>

Вот моя функция, куда я отправляю данные в БД. Мой следующий шаг - извлечь данные из БД и отобразить их в html:

 from django.shortcuts import render
    from django.http import HttpResponse
    from pages.models import Contact
    # from django.views import View
    # Create your views here.
    def home(request):
      return render(request, 'index.html', {'title':'Home Page'})
    def contact(request):

      if(request.method == 'POST'):
        data = Contact(
          name = request.POST['name'],
          email = request.POST['email'], 
          address = request.POST['address'],
          city = request.POST['city'],
          zipcode = request.POST['zipcode'],  

        )
        data.save()

        dbdata = Contact.objects.all()
        print(dbdata)
      return render(request, 'contact.html',  {'title':'Contact Page','row':dbdata})

Когда я пытаюсь получить данные из БД, возникает следующая ошибка:

UnboundLocalError at /pages/contact/
local variable 'dbdata' referenced before assignment

Как я могу получить и отобразить мои данные?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

Произошла ошибка при передаче контекста. Вы используете ключ строка в contex. Но вы вызываете строки в для l oop .change ключ строка до строк . и сохраните для l oop, как есть.

здесь, в передаваемом контексте, измените диктативный ключ

return render(request, 'contact.html',  {'title':'Contact Page','rows':dbdata})

, пожалуйста, дайте мне знать, если он работает или нет. .

1 голос
/ 03 февраля 2020

Вы должны переместить объявление dbdata из блока if(request.method == 'POST')::

def contact(request):

  if(request.method == 'POST'):
    data = Contact(
      name = request.POST['name'],
      email = request.POST['email'], 
      address = request.POST['address'],
      city = request.POST['city'],
      zipcode = request.POST['zipcode'],  

    )
    data.save()

  dbdata = Contact.objects.all()
  print(dbdata)
  return render(request, 'contact.html',  {'title':'Contact Page','row':dbdata})

В противном случае, если GET запрос блока кода внутри, если оператор не был достигнут, и вы увидите эту ошибку.

Также в шаблоне вы должны заменить rows на row внутри для l oop:

{% for row in rows%}
    <tr>
        <th>{{row.name}}</th> 
        <th>{{row.emai}}</th>
        <th>{{row.address}}</th>
        <th>{{row.city}}</th>
        <th>{{row.zipcode}}</th>
    </tr>
{%endfor%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...