MTV新手Python Djang的问题

2024-04-18 08:55:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我对MVC和MTV的概念有点陌生,我正在努力学习pythondjango。我想使图书目录,必须有添加和删除功能。我试图遵循最佳实践和通用视图,但最后有点卡住了,我觉得我错过了一些非常小的东西,但我不能找出它-说实话,我现在非常疲惫,我没有太多的时间。这是我的密码: 型号:

class Books(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    isbn = models.CharField(max_length=200)
    pages = models.IntegerField(default=0)

    def __unicode__(self):
        return self.title


class BooksForm(ModelForm):
    class Meta:
        model = Books

视图:

# coding: utf-8

from django.core.urlresolvers import reverse_lazy
from django.views.generic import ListView, UpdateView, CreateView, DetailView


from models import Book


class BooksDetailView(DetailView):
    model = Book
    template_name = "books_portal/details.html"


class BooksCreateView(CreateView):
    model = Book
    template_name = "books_portal/add.html"
    success_url = reverse_lazy('books_portal')


class BooksUpdateView(UpdateView):
    model = Book
    template_name = "books_portal/add.html"
    success_url = reverse_lazy('books_portal')


class BooksListView(ListView):
    model = Book
    context_object_name = 'books_list'
    template_name = "books_portal/index.html"

    def get_queryset(self):
        return Book.objects.order_by('author')[:5]

模板: 添加.html你知道吗

{% extends "books_portal/base.html" %}

{% block title %}Add books{% endblock %}

{% block extracss %}
<style>
    .top-buffer { margin-top:20px; }
    .bs-docs-nav { background-color: #563d7c; }
</style>
{% endblock extracss %}

{% block content %}
        <form action="" method="post" class="form-horizontal" role="form">{% csrf_token %}
            <div class="row top-buffer">
                <div class="col-md-1">
                    {{form.title.label_tag}}
                    <input type="text" value="" class=""/>
                </div>
            </div>
            <div class="row top-buffer">
                <div class="col-md-1">
                    {{form.author.label_tag}}
                    <input type="text" value="" class=""/>
                </div>
            </div>
            <div class="row top-buffer">
                <div class="col-md-2 col-md-offset-1">
                    <input type="submit" value="Save" class="btn btn-primary btn-lg"/>
                </div>
            </div>
        </form>
{% endblock %}

你知道吗基本.html你知道吗

<!DOCTYPE html>
    <html>
        <head>
            <title>{% block title %}{{title|default:"Book Library"}}{% endblock %}</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            {% block extracss %}{% endblock extracss %}
        </head>
        <body>
            <div class="container">
                <div class="navbar-header">
                    <a href="{% url 'books_portal' %}" class="navbar-brand">Books Portal</a>
                </div>
                {% block content %}
                {% endblock %}
            </div>

            {% block extrajs %}{% endblock extrajs %}
        </body>
    </html>

你知道吗详细信息.html你知道吗

{% extends "books_portal/base.html" %}

{% block title %}Details{% endblock %}

{% block extracss %}
<style>
    .top-buffer { margin-top:20px; }
    .bs-docs-nav { background-color: #4CD085; }
</style>
{% endblock extracss %}

{% block content %}
         <div class="row top-buffer">
                <div class="col-md-1">
                    <strong>Title:</strong>
                </div>
                <div class="col-md-2">
                    {{book.title}}
                </div>
            </div>
            <div class="row top-buffer">
                <div class="col-md-1">
                    <strong>Author:</strong>
                </div>
                <div class="col-md-2">
                    {{book.author}}
                </div>
            </div>
            <div class="row top-buffer">
                </div>
        <div class="row">
            <div class="col-md-1 col-md-offset-1 text-center"><a href="{% url 'books_portal' %}" class="btn btn-primary btn-lg">OK</a></div>
        </div>
{% endblock %}

你知道吗索引.html你知道吗

{% extends "books_portal/base.html" %}

    {% block title %}Collection of books{% endblock %}

    {% block extracss %}
    <style>
        .top-buffer { margin-top:20px; }
        .bs-docs-nav { background-color: #563d7c; }
    </style>
    {% endblock extracss %}

    {% block content %}
        <table class="table table table-hover">
            <tr>
                <th class="text-center">Title</th>
                <th class="text-center">Author</th>
                <th class="text-center">Edit</th>
            </tr>
            {% for book in books_list %}
            <tr>
                <td class="text-center"><a href="{% url 'books_details' pk=book.id%}">{{ book.title }}</a></td>
                <td class="text-center">{{ book.author }}</td>
                <td class="text-center"><a href="{% url 'books_edit' pk=book.id%}" class="btn btn-default">Delete</a></td>
            </tr>
            {% endfor %}
        </table>
        <div class="row">
            <div class="col-md-2 col-md-offset-5 text-center"><a href="{% url 'books_add' %}" class="btn btn-primary btn-lg">Add</a></div>
        </div>
    {% endblock %}

目前我不能添加或删除任何书籍,任何帮助将不胜感激。非常感谢。你知道吗


Tags: textdivtitletophtmlbuffercolbooks
1条回答
网友
1楼 · 发布于 2024-04-18 08:55:02

我已经剪贴了你所有的代码,还有一个相关的网址.py,进入一个新项目。最直接的问题是,你没有显示任何形式的错误在你的添加.html. 您只需在模板的顶部添加{{ form.errors }}。你知道吗

一旦您完成了,您将看到实际的问题:您在创建图书时没有提供所有相关字段。实际上,Django看不到任何字段,因为您没有给出任何inputsname属性。实际上,您不应该手动创建input元素:您应该让Django这样做,因为这样在重新显示有错误的表单或编辑现有书籍时,它还负责用现有值预填充字段。应该是这样的:

{{ form.title.label_tag }}
{{ form.title }}
{{ form.title.errors }}

还有一个突出的问题是,您没有包括isbnpages字段,而您的模型是根据需要处理这些字段的。您可以在模型中将它们设置为blank=False,或者在ModelForm中使用exclude列表。无论哪种方式,您都需要在pages的model字段中使用null=False。你知道吗

当然,也可以将它们添加到表单中。老实说,在学习过程中,现在最简单的方法就是用{{ form.as_p }}替换<form>标记中的所有HTML,这样Django就可以为您输出所有内容。你知道吗

相关问题 更多 >