Python Django URL路由行为不正常,路由到意外路径

Python Django URL路由行为不正常,路由到意外路径,python,django,post,http-post,Python,Django,Post,Http Post,我对model.py做了一些更改,进行了外键调整。(我意识到我把他们放错了班)。删除了数据库,并从头开始创建了一个新的数据库,因为我已经非常熟悉了。当我觉得我纠正了数据库中要运行的所有内容,并再次运行runserver时,我得到了一个KeyError错误,指向一个不应该指向的路径 当我输入url 127.0.0.1:8000/add_tech/或add_exp/时,它加载正确的表单,当我提交时,它显示函数通过url.py中的正则表达式接收术语tech或exp,但令人失望的是堆栈跟踪输出显示的不同

我对model.py做了一些更改,进行了外键调整。(我意识到我把他们放错了班)。删除了数据库,并从头开始创建了一个新的数据库,因为我已经非常熟悉了。当我觉得我纠正了数据库中要运行的所有内容,并再次运行runserver时,我得到了一个KeyError错误,指向一个不应该指向的路径

当我输入url 127.0.0.1:8000/add_tech/或add_exp/时,它加载正确的表单,当我提交时,它显示函数通过url.py中的正则表达式接收术语techexp,但令人失望的是堆栈跟踪输出显示的不同

views.py的路由似乎不正确。是否有我应该遵循的步骤来帮助逐步完成并调试此过程

py具有以下特性

from django.conf.urls import patterns, include, url
from resume.views import add_entry, remove_entry

urlpatterns = patterns('',
    url(r'^add_(\w+)/$',add_entry),
    url(r'^remove_(\w+)/$',remove_entry),
)
它被路由到resume/:(如图所示)中的views.py

仅需技术表格(应在提交前后加载):

按要求提交技术文件:

def submit_tech(request):
    vals = request.POST.dict()
    vals['errors']=[]
    if vals['tech_name']:
        try:
            exists=Technologies.objects.get(name=vals['tech_name'])
        except Technologies.DoesNotExist:
            exists=None
        if not exists:
            tech = Technologies(name=vals['tech_name'],tech_type=vals['tech_type'])
            tech.save()
        else:
            vals['errors'].append(exists.name + "already exists as a " + exists.tech_type)
    else:
        vals['errors'].append("Added Nothing, Text Feild was empty")
    vals['techs'] = Technologies.objects.all()
    return render(request, 'tech_form.html', vals)

我创建了一个测试项目并复制粘贴了您的代码。它在这里工作得很好,我可以成功地发布到
/add\u tech/
,并且在DB中创建了一个新的
Technologies

我建议您检查
add\u exp
函数中的
render()
语句,模板名称是否正确

此外,有两项建议:
1). 在
add_entry
功能中,增加对无效条目名称的处理;2). 在
submit\u tech
功能的第3行中,如果vals.get('tech\u name',None'),请使用
,否则当有人提交无效表单时,代码将引发500错误

错误似乎发生在
submit\u tech
功能内部。你能把这个功能粘贴到这里吗?按要求添加了Submit_tech@ZZY,我正在查看,但看起来不错。只是不确定我是否理解为什么它被路由到(任何东西)\u tech,而页面应该被聚焦(任何东西)\u exp,反之亦然。模板与视图不匹配。这是一种奇怪的行为,很高兴听到您能够通过@ZZY使其工作。我可以在上面显示的options dict中注释出一行,然后add_entry函数将引导add_tech()。更改键或移动“exp”的位置:add_exp()在dict中,仍将其重定向到自身。我现在正在通过url.py解决这个问题。谢谢你的建议,这实际上解决了另一个我认为是相关问题的问题。我希望在我工作的时候,我能把它洗干净。
[18/May/2014 17:01:21] "GET /add_exp/ HTTP/1.1" 200 1446

Print Option in Url is:**exp**

Internal Server Error: **/add_exp/**
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 115, in get_response
    response = callback(request, *callback_args, \*\*callback_kwargs)

File "/home/asilvajr/Repository/mysite/resume/views.py", line 120, in **add_entry**
    'tech':add_tech(request),

File "/home/asilvajr/Repository/mysite/resume/views.py", line 19, in **add_tech**
    return submit_tech(request)

File "/home/asilvajr/Repository/mysite/resume/views.py", line 76, in **submit_tech**
    if vals['tech_name']:

KeyError: 'tech_name'

---- End Console Output -----
<form action="/add_tech/" method="POST">
<label for="Tech">Technolgy Used:</label>
    <input type="text" name="tech_name"><br/>
    <label for="Type">Type:</label>
<select name="tech_type">
    <option name="L">Language</option>
    <option name="Fr">Framework</option>
    <option name="T">Tools</option>
    <option name="K">Kits</option>
    <option name="E">Extensions</option>
</select><br/>
<input type="submit" name="submit"><br/>
</form>
<form action="/add_exp/" method="POST">
<label for="Event">Event:</label>
    <input type="text" name="event"><br/>
    <label for="Description">Description:</label>
<textarea type="textarea" name="exp_descript"></textarea><br/>
<label for="Technology">Technology Used:</label>
{% for tech in techs %}
<input type="checkbox" class="tech_{{ tech.tech_type }}" name="technologies" value="{{ tech.id }}">{{ tech.name }} :: {{ tech.tech_type }}<br/>
{% endfor %}
<input type="submit" name="submit"><br/>
</form>
def add_tech(request):
    if 'submit' in request.POST:
        return submit_tech(request)
    techs = Technologies.objects.all()
    return render(request, 'tech_form.html',{'techs':techs})
def submit_tech(request):
    vals = request.POST.dict()
    vals['errors']=[]
    if vals['tech_name']:
        try:
            exists=Technologies.objects.get(name=vals['tech_name'])
        except Technologies.DoesNotExist:
            exists=None
        if not exists:
            tech = Technologies(name=vals['tech_name'],tech_type=vals['tech_type'])
            tech.save()
        else:
            vals['errors'].append(exists.name + "already exists as a " + exists.tech_type)
    else:
        vals['errors'].append("Added Nothing, Text Feild was empty")
    vals['techs'] = Technologies.objects.all()
    return render(request, 'tech_form.html', vals)