我很新的Python和我建立在Django一个基本的博客。我试图启用个人博客帖子的编辑。我必须'获取'这些个人博客帖子,以便我可以编辑它们。到目前为止,系统并不喜欢我的'.get'方法,并向我展示了一个ValueError。我试图将值类型更改为int,str,float,甚至是复杂的。这一切或者返回相同的或者说它不喜欢'id'或甚至'pk',如果我改变它。更改值类型不改变ValueError异常无效基数为10字面INT():“”
这是代码。
views.py
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)
如果你会发现,在高清博文(请求,blogpost_id):,我能够采用不用彷徨方法完全相同的方式,它是成功的。更重要的是,.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))
urls.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'),
]
对于
(?P<entry_id>)/$'
,我确实取出部,\ d +,因为系统将'\'读回为'\\',所以我也是如此知道了。
forms.py
from django import forms
from .models import BlogPost
class PostForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['text']
labels = {'text':''}
widgets = {'text': forms.Textarea(attrs={'cols':80})}
我能做些什么来隔离并获得具体岗位对它们进行编辑?
由于任何人谁回答这个,提前。
============================================== ==========================
@Alasdair 我没有添加\ 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.
此外,当我这样做,它会改变个人博客文章的行为。我获得原来的职位的详细视图的这种反应:
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 %}
您应该使用'(?P \ d +)'来捕获条目ID。如果您遇到错误,请将其全部包含在内。 –
Alasdair
@Alasdair感谢您的回复。我这样做,这是我得到的错误:'找不到页面(404) 请求方法:\t GET 请求URL:\t http://127.0.0.1:8000/edit_entry// 使用博客中定义的URLconf。 Django按以下顺序尝试了这些网址格式: ^^edit_entry /(?P \ d +)/ $ [name ='edit_entry'] 当前网址edit_entry //与这些网址中的任何一个都不匹配。 你看到这个错误,因为你的Django设置文件中有DEBUG = True。将其改为False,Django将显示一个标准的404页面。' –
blackwidow
您的网址应该是 'URL(R '^ edit_entry /(ΔP \ d +)/ $',views.edit_entry,名称= 'edit_entry')' 您是在看到404错误'/ edit_entry //'因为这不是有效的网址。它应该像'/ edit_entry/1 /'('1'是帖子的ID) –