我编辑时,我的Django网站没有显示任何表单

时间:2017-12-04 09:14:16

标签: python django

我正在使用Django构建网站。 而对于某些原因,使用所有表格的词典根本没有显示..

单击“编辑”按钮时,模式显示时没有表单...

forms.server_id需要包含使用server_id的所有表单... 我编辑时用来显示以前数据的server_id。

但出于某种原因,它根本不显示任何形式......

enter image description here

index.html -

{% load static i18n util_filters %}
<html lang="en">

<head>
        <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs4/jq-3.2.1/jq-3.2.1/dt-1.10.16/af-2.2.2/b-1.4.2/fc-3.2.3/fh-3.1.3/kt-2.3.2/r-2.2.0/rg-1.0.2/rr-1.2.3/sc-1.4.3/sl-1.2.3/datatables.min.css"/>

        <script src="https://use.fontawesome.com/3c2c6890cf.js"></script>

        <script type="text/javascript" src="https://cdn.datatables.net/v/bs4/jq-3.2.1/jq-3.2.1/dt-1.10.16/af-2.2.2/b-1.4.2/fc-3.2.3/fh-3.1.3/kt-2.3.2/r-2.2.0/rg-1.0.2/rr-1.2.3/sc-1.4.3/sl-1.2.3/datatables.min.js"></script>

        <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <a class="navbar-brand" href="{% url 'serverlist' %}">DevOps Map</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav">

          <li class="nav-item">
            <a class="nav-link" href="{% url 'serverlist' %}">Servers</a>
          </li>
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'serverlist'  %}">Switches</a>
                </li>

        </ul>
      </div>
    </nav>

<style type="text/css">
.wrapper {
    display:flex;
}
</style>
</head>

<body>


<div class="container">

    <br>
    <center><h1 class="display-4">DevOps Server List</h1></center>
    <br>

    <center><button type="button" class="save btn btn-outline-success btn-lg" data-toggle="modal" data-target=".AddServer">Add Server <i class="fa fa-server fa-lg" aria-hidden="true"></i></button></center>
    <table class="table table-hover table-bordered table-condensed" cellspacing="0" width="1300" id="ServerTable">
    <thead>

      <tr>
        <th><center> #</center></th>
        <th><center>  Server Name </center></th></center>
        <th><center>  Owner </center></th></center>
        <th><center>  Project </center></th></center>
        <th><center>  Description </center></th></center>
        <th><center>  IP Address </center></th></center>
        <th><center> ILO </center></th></center>
        <th><center>  Rack </center></th></center>
        <th><center>  Status </center></th></center>
        <th><center> &nbsp;&nbsp;&nbsp;&nbsp; Actions &nbsp;&nbsp;&nbsp;&nbsp;   </center></th></center>


        </tr>
        </thead>
    <tbody>

                {% for server in posts %}


        <tr>
          <div class ="server">
            <td></td>
            <td><center>{{ server.ServerName }}</center></td>
            <td><center>{{ server.Owner }}</center></td>
            <td><center>{{ server.Project }}</center></td>
            <td><center>{{ server.Description }}</center></td>
            <td><center>{{ server.IP }}</center></td>
            <td><center>{{ server.ILO }}</center></td>
            <td><center>{{ server.Rack }}</center></td>
            <td><h4><span class="badge badge-success">Online</span></h4></td></center>

            <td>

&nbsp;&nbsp;&nbsp;&nbsp;
            <button type="button" class="btn btn-outline-danger" data-toggle="modal" href="#delete-server-{{server.id}}"
             data-target="#Del{{server.id}}">Delete <i class="fa fa-trash-o"></i></button>&nbsp;
            <button type="button" class="btn btn-outline-primary" data-toggle="modal" href="#edit-server-{{server.id}}"
             data-target="#Edit{{server.id}}"> &nbsp;&nbsp;Edit&nbsp;            <i class="fa fa-pencil"></i></button>
&nbsp;

                        <div id ="Del{{server.id}}" class="modal fade" role="document">
                            <div class="modal-dialog" id="delete-server-{{server.id}}">
                                    <div class="modal-content">
                                        <div class="modal-header">
                                            <h5 class="modal-title">Delete Confirmation</h5>
                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                                    </button>
                                        </div>
                                        <div class="modal-body">
                                        <form action="{% url 'delete_post' server.id %}" method="post">{% csrf_token %}
                                            <h6>Are you sure you want to delete {{ server.ServerName }}?</h6>
                                                <br>
                                            <center><input type="submit" class="btn btn-danger btn-md" value="Confirm"/>
                                                <button type="submit" class="btn btn-secondary" data-dismiss="modal">Cancel</button></center>

                                        </form>
                                    </div>
                                    </div>


                        </div>
            </div>




            <div class="modal fade bd-example-modal-sm" id="Edit{{server.id}}" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
                        <div class="modal-header">
                                <h5 class="modal-title">Edit Server <strong>{{ server.ServerName }}</strong> </h5>
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                        <span aria-hidden="true">&times;</span>
                                </button>
                        </div>
                                <div class="modal-body">

                                                                        {% with server.id as server_id %}
                                                                        {% with forms|get_by_key:server_id as edit_form %}
                                        <form action="{% url 'edit_post'  server_id %}" method="post"> {% csrf_token %}

                                <!--<center>    {{ edit_form.as_p }} </center> -->
                                        {% for field in forms.server_id %}


                                                            <div class="fieldWrapper">

                                                {{ field.errors }}
                                                                        <!-- {{ field.label_tag }} -->

                                <small><strong>{{ field.html_name }}<p align="left"></b> {{ field }}</small> </strong>

                                                {% if field.help_text %}
                                                <p class="help">{{ field.help_text|safe }}</p>
                                                {% endif %}

                                                        </div>

                                                {% endfor %}
                                                                </div>
                <div class="wrapper">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <h2><button type="submit" class="save btn btn-success btn-lg">Confirm</button></h2>&nbsp;&nbsp;&nbsp;
                                <h2><button type="submit" class="btn btn-secondary btn-lg" data-dismiss="modal">Cancel</button></h2>
                </div>

                </form>
                {% endwith %}
                {% endwith %}

                </div>
                </td>
        </tr>
                {% endfor %}
    </tbody>
</h5>
    </table>



<div class="modal fade AddServer" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Add Server</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
                <div class="modal-body">
                    <form method="post" novalidate> {% csrf_token %}
                    <!--<center>    {{ form.as_p }} </center> -->
                            {% for field in form %}
                                <div class="fieldWrapper">
                            {{ field.errors }}
                                    <!-- {{ field.label_tag }} -->

                    <small><strong>{{ field.html_name }}</strong></small><p align="left"></b> {{ field }}   </p>

                            {% if field.help_text %}
                            <p class="help">{{ field.help_text|safe }}</p>
                            {% endif %}

                            </div>

                {% endfor %}

                </div>
                <div class="wrapper">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <h2><button type="submit" class="save btn btn-success btn-lg" >Confirm</button></h2>&nbsp;&nbsp;&nbsp;
                <h2><button type="submit" class="btn btn-secondary btn-lg" data-dismiss="modal">Cancel</button></h2>
                </div>
            </div>
        </form>
    </div>
  </div>
</div>

views.py -

# Create your views here.

from django.shortcuts import render_to_response
from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.template import RequestContext
from django.views.generic import TemplateView, UpdateView, DeleteView, CreateView
from DevOpsWeb.forms import HomeForm
from DevOpsWeb.models import serverlist
from django.core.urlresolvers import reverse_lazy
from simple_search import search_filter
from django.db.models import Q

class HomeView(TemplateView):

    template_name = 'serverlist.html'


    def get(self, request):

        form = HomeForm()
        query = request.GET.get("q")
        posts = serverlist.objects.all()

        forms = {}

        if query:
            posts = serverlist.objects.filter(Q(ServerName__icontains=query) | Q(Owner__icontains=query) | Q(Project__icontains=query) | Q(Description__icontains=query) | Q(IP__icontains=query) | Q(ILO__icontains=query) | Q(Rack__icontains=query))
        else:
            posts = serverlist.objects.all()
        #for post in posts:
        #    form = HomeForm(instance=post)
        for post in posts:
            forms[post.id] = HomeForm(instance=post)
        args = {'form' : form,'forms': forms, 'posts' : posts}
        #args = {'form' : form, 'forms': forms, 'posts' : posts}
        return render(request, self.template_name, args)

    def post(self,request):
        form = HomeForm(request.POST)
        posts = serverlist.objects.all()



        if form.is_valid(): # Checks if validation of the forms passed
            post = form.save(commit=False)
            post.save()
            #form = HomeForm()
            return redirect('serverlist')
        for post in posts:
            forms[post.id] = HomeForm(instance=post)
        args = {'form' : form, 'forms': forms, 'posts' : posts}
        #args = {'form' : form,'forms': forms, 'posts' : posts}
        return render(request, self.template_name,args)


class PostDelete(DeleteView):
    model = serverlist
    success_url = reverse_lazy('serverlist')

class PostEdit(UpdateView):
    template_name = 'serverlist.html'
    model = serverlist
    form_class = HomeForm
    #fields = ['ServerName','Owner','Project','Description','IP','ILO','Rack','Status']

    success_url = reverse_lazy('serverlist')
    #def get_object(self):
    #    obj = get_object_or_404(Calification, pk=self.request.POST.get('pk'))
    #    return obj

1 个答案:

答案 0 :(得分:1)

这:

{% with server.id as server_id %}
    {# ... #}
    {{ forms.server_id.as_p }}

无法正常工作 - 它会查找forms["server_id"](=&gt;使用文字字符串"server_id"作为键)。您需要一个自定义模板过滤器such as the one described here。正如丹尼尔罗斯曼在评论中正确提到的那样,你也必须将server应该传递给模板的上下文。

另请注意,您将在NameError中获得HomeView.post - 您复制粘贴的部分代码填写在您的posts字典中,但不包括实现它的部分。你应该把它考虑在内而不是复制粘贴。