Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单/视图/模板的故障排除以及它们如何协同工作_Python_Django - Fatal编程技术网

Python Django表单/视图/模板的故障排除以及它们如何协同工作

Python Django表单/视图/模板的故障排除以及它们如何协同工作,python,django,Python,Django,我目前正试图从这本书中学习Django,我读了其中的大部分,现在正试图编写一个我自己的网络应用程序。我真的搞不懂它们是如何相互作用的,它们是如何不合拍的 我的URL.py文件如下所示 from django.conf.urls.defaults import patterns, include, url from users.views import homepageview, submitted, referral_create urlpatterns = patterns('', (r'

我目前正试图从这本书中学习Django,我读了其中的大部分,现在正试图编写一个我自己的网络应用程序。我真的搞不懂它们是如何相互作用的,它们是如何不合拍的


我的URL.py文件如下所示

from django.conf.urls.defaults import patterns, include, url
from users.views import homepageview, submitted, referral_create

urlpatterns = patterns('',
(r'^$', homepageview),
(r'^submitted/$', referral_create),
  # Create your views here.
from django.shortcuts import render_to_response
from django import forms
from datreferral.users.forms import ReferralCode

def homepageview(request):
    now = 'your damn referral code'
    return render_to_response('datreferraltemplate.html', {'now': now})

def referral_create(request):
    if request.method == 'POST':
        form = ReferralCode(request.POST)
        if form.is_valid():
            new_code = form.save()
            return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,)))
    else:
        form = ReferralCode()
{% extends "base.html" %}

{% block title %}
Enter your referral codes!
{% endblock %}

{% block content %}
<h1>Enter your code</h1>

    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

    <form action="" method="POST">
        <p>Subject: <input type="text" name="subject" value="{{ referralcode }}"></p>
        <input type="submit" value="Submit">
    </form>
{% endblock %}
views.py文件如下所示

from django.conf.urls.defaults import patterns, include, url
from users.views import homepageview, submitted, referral_create

urlpatterns = patterns('',
(r'^$', homepageview),
(r'^submitted/$', referral_create),
  # Create your views here.
from django.shortcuts import render_to_response
from django import forms
from datreferral.users.forms import ReferralCode

def homepageview(request):
    now = 'your damn referral code'
    return render_to_response('datreferraltemplate.html', {'now': now})

def referral_create(request):
    if request.method == 'POST':
        form = ReferralCode(request.POST)
        if form.is_valid():
            new_code = form.save()
            return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,)))
    else:
        form = ReferralCode()
{% extends "base.html" %}

{% block title %}
Enter your referral codes!
{% endblock %}

{% block content %}
<h1>Enter your code</h1>

    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

    <form action="" method="POST">
        <p>Subject: <input type="text" name="subject" value="{{ referralcode }}"></p>
        <input type="submit" value="Submit">
    </form>
{% endblock %}
form.py文件如下所示

from django import forms

class ReferralCode(forms.Form):
    referralcode = forms.CharField()
模板看起来像这样

from django.conf.urls.defaults import patterns, include, url
from users.views import homepageview, submitted, referral_create

urlpatterns = patterns('',
(r'^$', homepageview),
(r'^submitted/$', referral_create),
  # Create your views here.
from django.shortcuts import render_to_response
from django import forms
from datreferral.users.forms import ReferralCode

def homepageview(request):
    now = 'your damn referral code'
    return render_to_response('datreferraltemplate.html', {'now': now})

def referral_create(request):
    if request.method == 'POST':
        form = ReferralCode(request.POST)
        if form.is_valid():
            new_code = form.save()
            return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,)))
    else:
        form = ReferralCode()
{% extends "base.html" %}

{% block title %}
Enter your referral codes!
{% endblock %}

{% block content %}
<h1>Enter your code</h1>

    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

    <form action="" method="POST">
        <p>Subject: <input type="text" name="subject" value="{{ referralcode }}"></p>
        <input type="submit" value="Submit">
    </form>
{% endblock %}
{%extends“base.html”%}
{%block title%}
输入您的推荐代码!
{%endblock%}
{%block content%}
输入您的代码
{%if错误%}
    {错误%中的错误为%0}
  • {{error}}
  • {%endfor%}
{%endif%} 主题:

{%endblock%}
希望这是足够的信息

我在找两样东西。首先,当我在提交表单后尝试查看页面时,我没有找到where,因为我假设“if request.method=='POST':”没有触发。很明显,这是很明显的事情,但我正处于这样一种模式中,我可以找到我一生中的错误

我的第二个问题基本上是请求帮助。不知何故,在多次阅读这些章节之后,我似乎无法确定所有的片段是如何相互作用的。我知道template和url.py以及views.py相互作用,我得到了(我想),但我不能真正理解数据库和表单如何相互作用以及如何与视图/模板相互作用。比如说,我只是想要一个简单的表单,其中输入的任何用法都会写入数据库。。。你会怎么做?如果有必要的话,我会用postgres

注意:模板中的表单和是我在这里找到的代码的修改版本,我试图通过操作来满足我的需要,但失败了,所以如果这没有意义,请不要过度丢弃。由于这些问题,我还不能处理太多该部分


由于我是网络开发新手,我非常感谢任何愿意帮助我或为我指明正确方向的人。

嗯,这里有很多错误

首先,表单由基本视图
homepageview
呈现,并提交回同一URL。然而,表单处理逻辑在一个单独的视图中,没有被调用。更改表单的
action
参数以指向其他URL,或者-最好-将所有逻辑移到同一视图中

其次,表单处理视图没有返回响应或呈现模板。这是Django中的一个错误,如果您设法调用该视图,您将看到一个异常

第三,我很难相信你读了整本Django的书,却没有看到任何关于模型或数据库的内容。这里没有任何迹象表明您已经设置了任何模型,但是如果没有这些模型,Django将不会向数据库写入任何内容。您需要这样做,然后将表单更改为ModelForm子类,然后可以成功调用
form.save()

  • 在YourElse子句中不返回任何内容。视图必须总是返回一个响应,它可以是几乎任何东西,但是在大多数情况下,您将返回一个
    HttpResponse
    的(子)类的实例(我非常喜欢这个快捷方式)。最好在视图的底部有一个默认返回,为“特殊”响应添加一些早期返回,否则让执行达到默认返回-这样你就不会出现什么都不返回的情况

  • 您必须使用模型来保存数据(您是否通过模型进行了工作?)。通常执行模式如下:

  • 您的应用程序收到一个请求,并在url.py中搜索应调用的视图
  • 请求通过
  • 您的视图被调用并“执行”某些操作。也就是说,它从数据库中获取数据(再次使用模型)或在数据库中存储某些内容(或保存上传的文件、发送邮件等-aview真的可以做任何事情)
  • 您查看返回的“某物”
  • 返回的“某物”通过中间件传递,并最终在传递给浏览器的数据流中进行转换

  • 就这样。这有点简化,但几乎涵盖了所有重要部分。

    哇。好吧老实说,我把它们都读了一遍,然后根据需要重读章节。我不能诚实地宣称自己的身份。我从来没有读过关于这个子类Modelform的任何东西。书上有吗?我得再看一遍,但我完全没有看清楚
    我也建立了模型,但正如我所说,我对它们如何与所有事物交互感到非常困惑,并且认为它们没有影响到这一点。所以我没有包括他们