Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 更改值类型不会';t change ValueError基数为10:'';_Python_Django - Fatal编程技术网

Python 更改值类型不会';t change ValueError基数为10:'';

Python 更改值类型不会';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

我对Python非常陌生,正在用django构建一个基本的博客。我正在尝试启用个人博客帖子的编辑。我必须“获取”这些单独的博客帖子,这样我才能编辑它们。到目前为止,系统不喜欢我的“.get”方法,并向我显示了一个ValueError。我尝试过将值类型更改为int、str、float甚至complex。如果我把它改成“id”或者“pk”,它要么返回相同的结果,要么说它不喜欢“id”,甚至不喜欢“pk”

这是代码

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)
如果您注意到,在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 %}