Python 更改值类型不会';t change ValueError基数为10:'';
我对Python非常陌生,正在用django构建一个基本的博客。我正在尝试启用个人博客帖子的编辑。我必须“获取”这些单独的博客帖子,这样我才能编辑它们。到目前为止,系统不喜欢我的“.get”方法,并向我显示了一个ValueError。我尝试过将值类型更改为int、str、float甚至complex。如果我把它改成“id”或者“pk”,它要么返回相同的结果,要么说它不喜欢“id”,甚至不喜欢“pk” 这是代码 views.pyPython 更改值类型不会';t change ValueError基数为10:'';,python,django,Python,Django,我对Python非常陌生,正在用django构建一个基本的博客。我正在尝试启用个人博客帖子的编辑。我必须“获取”这些单独的博客帖子,这样我才能编辑它们。到目前为止,系统不喜欢我的“.get”方法,并向我显示了一个ValueError。我尝试过将值类型更改为int、str、float甚至complex。如果我把它改成“id”或者“pk”,它要么返回相同的结果,要么说它不喜欢“id”,甚至不喜欢“pk” 这是代码 views.py from django.shortcuts import rend
from django.shortcuts import render
from blogs.models import BlogPost
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .forms import PostForm
def index(request):
"""The home page for blogs"""
blogposts = BlogPost.objects.order_by('date_added')
context = {'blogposts': blogposts}
return render(request, 'blogs/index.html', context)
def blogpost(request, blogpost_id):
"""Show a single post"""
postings = BlogPost.objects.get(id=blogpost_id)
context = {'postings': postings}
return render(request, 'blogs/blogpost.html', context)
def new_post(request):
"""Writ a new post to the blog"""
if request.method != 'POST':
# No data submitted; create a blank form.
form = PostForm()
else:
# POST data submitted; process data
form = PostForm(data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:index'))
context = {'form': form}
return render(request, 'blogs/new_post.html', context)
def edit_entry(request, entry_id):
"""Edit an existing entry"""
entry = BlogPost.objects.get(id=entry_id)
if request.method != 'POST':
# Initial request; pre-fill form with the current entry
form = PostForm(instance=entry)
else:
# POST data submitted; process data
form = PostForm(instance=entry, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:blogpost', args[entry_id]))
context = {'entry': entry, 'form': form}
return render(request, 'blogs/edit_entry.html', context)
如果您注意到,在def blogpost(request,blogpost\u id):下,我能够以同样的方式使用.get方法,并且获得了成功。此外,由于链接是一个整数,因此.get无论如何都应该作为int来工作
models.py
from django.db import models
class BlogPost(models.Model):
"""A blog post"""
title = models.CharField(max_length=200)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return a string rep of model"""
return (str(self.title + " : " + self.text))
url.py
"""URL Configs for app blogs"""
from django.conf.urls import url
from blogs import views
urlpatterns = [
#Home page
url(r'^$', views.index, name='index'),
#Individual Postings Pages
url(r'^(?P<blogpost_id>\d+)/$', views.blogpost, name='blogpost'),
#New Post Page
url(r'^new_post$', views.new_post, name='new_post'),
#Page for editing a post
url(r'^edit_entry/(?P<entry_id>)/$', views.edit_entry, name='edit_entry'),
我可以做些什么来隔离并获得特定的帖子来编辑它们
感谢所有提前回答这个问题的人
========================================================================
@阿拉斯代尔
我确实向url添加了\d+,这是我收到的
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/edit_entry//
Using the URLconf defined in blog.urls, Django tried these URL patterns, in this order:
^admin/
^ ^$ [name='index']
^ ^(?P<blogpost_id>\d+)/$ [name='blogpost']
^ ^new_post$ [name='new_post']
^ ^edit_entry/(?P<entry_id>\d+)/$ [name='edit_entry']
The current URL, edit_entry//, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
未找到页面(404)
请求方法:获取
请求URL:http://127.0.0.1:8000/edit_entry//
Django使用blog.URL中定义的URLconf,按以下顺序尝试了这些URL模式:
^管理员/
^^$[name='index']
^^(?P\d+/$[name='blogpost']
^^new\u post$[name='new\u post']
^^edit_entry/(?P\d+)/$[name='edit_entry']
当前URL edit_entry/,与其中任何一个都不匹配。
您看到此错误是因为Django设置文件中的DEBUG=True。将其更改为False,Django将显示一个标准的404页面。
而且,当我这样做时,它会改变个人博客文章的行为。我从原始帖子的详细视图中得到以下回应:
Exception Type: NoReverseMatch
Reverse for 'edit_entry' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['edit_entry/(?P<entry_id>\\d+)/$']
{% block content %}
<p>This is supposed to be for one post</p>
<p>{{ postings }}</p>
<p>Edit entry:</p>
<a href="{% url 'blogs:edit_entry' entry_id %}">edit entry</a>
{% endblock content %}
异常类型:NoReverseMatch
找不到参数“(“”,)”和关键字参数“{}”的“edit_entry”的反转。已尝试1个模式:[“编辑条目/(?P\\d+/$”]
{%block content%}
这应该是一个职位
{{发布}
编辑条目:
{%endblock内容%}
您收到的异常消息是因为您试图将空字符串解析为整数int(“”
)。那次行动毫无意义。url中的id模式应至少为一个字符
(?p)
是完全无用的模式,因为它不包含字符。它将始终匹配一个空字符串'
,并将其传递给视图函数
(?p)/$
,我确实取出了部分\d+
,因为系统将\
读回为\
,所以我取出了它
这就是它的工作原理。没有理由拿任何东西出去 您应该使用
(?p\d+)
来捕获条目id。如果您在获取条目id时出错,请将其全部包含进来。@Alasdair感谢您的回复。我这样做了,这就是我得到的错误:“页面未找到(404)请求方法:获取请求URL:使用blog.URL中定义的URLconf,Django尝试了这些URL模式,顺序如下:^^^ edit_entry/(?P\d+)/$[name='edit_entry']当前URL,edit_entry/,与其中任何一个都不匹配。您看到此错误是因为Django设置文件中的DEBUG=True。将其更改为False,Django将显示一个标准的404页面。“您的url应该是url(r'^edit\u entry/(?P\d+)/$),views.edit\u entry,name='edit\u entry')
您在/edit\u entry/
上看到404错误,因为这不是有效的url。”。它应该类似于/edit\u entry/1/
(1
是帖子的ID)@VStoykov谢谢你的回答。我输入的url如下:url(r'^edit\u entry/(?P\d+)/$),views.edit\u entry,name='edit\u entry')
但不知何故系统读取错误。首先,在浏览器地址栏中输入27.0.0.1:8000/edit\u entry/1/
直接转到编辑条目url。只要您将\d+
添加回,这应该可以工作。接下来,您需要修复详细信息页面上的{%url%}
标记。错误”(“”,)”
告诉您该模板上下文中缺少条目id
。也许你需要posting.id
。
Exception Type: NoReverseMatch
Reverse for 'edit_entry' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['edit_entry/(?P<entry_id>\\d+)/$']
{% block content %}
<p>This is supposed to be for one post</p>
<p>{{ postings }}</p>
<p>Edit entry:</p>
<a href="{% url 'blogs:edit_entry' entry_id %}">edit entry</a>
{% endblock content %}