【问题标题】:ValueError invalid literal for int() with base 10: '' [duplicate]以 10 为基数的 int() 的 ValueError 无效文字:'' [重复]
【发布时间】:2017-06-18 00:58:15
【问题描述】:

我正在制作一个图像的上传系统。 但我有一个错误, /accounts/upload_save/ 处的 ValueError 以 10 为基数的 int() 的无效文字: '' 。 我认为这个错误是 int 类型值不在参数中。

我的回溯显示

 photo_obj = Post.objects.get(id=photo_id) 

错了。 但是 get() 可以是 int 类型值,所以我无法修复我的错误。 我该如何解决?

我在views.py中写过,

@require_POST
def regist_save(request):
    form = RegisterForm(request.POST)
    if form.is_valid():
        user = form.save()
        login(request, user)
        context = {
            'user': request.user,
        }
        return redirect('profile')


    context = {
        'form': form,
    }
    return render(request, 'registration/accounts/regist.html', context)


def photo(request):
    d = {
        'photos': Post.objects.all(),
    }
    return render(request, 'registration/accounts/profile.html', d)


def upload(request, p_id):
    d = {
        'p_id': p_id,
    }
    return render(request, 'registration/accounts/profile.html', d)


def upload_save(request):
    photo_id = request.POST.get("p_id", "")
    photo_obj = Post.objects.get(id=photo_id)
    files = request.FILES.getlist("files[]")

    photo_obj.image1 = files[0]
    photo_obj.image2 = files[1]
    photo_obj.image3 = files[2]

    photo_obj.save()

    return redirect("registration/accounts/profile.html")

在 urls.py 中

from django.conf.urls import url
from . import views
from django.contrib.auth.views import login, logout

urlpatterns = [
    url(r'^regist/$', views.regist,name='regist' ),
    url(r'^regist_save/$', views.regist_save, name='regist_save'),
    url(r'^profile/$', views.profile, name='profile'),
    url(r'^upload/(?P<p_id>\d+)/$', views.upload, name='upload'),
    url(r'^upload_save/$', views.upload_save, name='upload_save'),
]

在 profile.html 中

{% extends "registration/accounts/base.html" %}
  {% block content %}

  <!DOCTYPE html>

  <html lang="ja">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>UPLOAD</title>
    </head>
    <body>
    user.username: {{ user.username }}<hr>
    user.is_staff: {{ user.is_staff }}<hr>
    user.is_active: {{ user.is_active }}<hr>
    user.last_login: {{ user.last_login }}<hr>
    user.date_joined: {{ user.date_joined }}

    <div class="container">
      <form action="{% url 'accounts:upload_save' %}" method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="files[]" multiple>
        <input type="hidden" value="{{ p_id }}" name="p_id">
        <input type="submit" value="Upload">
      </form>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    </body>
  </html>

  {% endblock %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    photo_id = request.POST.get("p_id", "")

    此 POST 请求中没有 p_id,因此将 photo_id 设置为空字符串 ''

    photo_obj = Post.objects.get(id=photo_id)

    然后你尝试用这个空字符串得到一个photo_obj,所以它告诉你ValueError: invalid literal for int() with base 10: ''

    【讨论】:

    • thx,你告诉我 p_id 定义不在任何地方,对吧?但我想我在 views.py def upload(request, p_id): d = { 'p_id': p_id, } return render(request, 'registration/accounts/profile.html', d) 中写了 p_id 那么,我怎么能修好吗?
    • p_id 应该是您表单中的参数之一,您需要检查您的 profile.html 模板以确保此参数可用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2013-08-04
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多