【问题标题】:Post and save Django variable, doesn´t work发布并保存 Django 变量,不起作用
【发布时间】:2018-11-26 22:36:40
【问题描述】:

有人可以检查我应该如何正确编写views.py部分吗?

如果我编码:

from django.shortcuts import render, redirect

def shifts_table(request):
    print(request.POST['value'])        
    return render(request, 'shifts_table.html', {})

...至少页面可以运行,但是如果我像下面这样的代码它不会运行,知道为什么吗?

from django.shortcuts import render, redirect
from django.contrib import messages

def shifts_table(request):
    if request.method == 'POST':
        number = request.POST['value']
        if number.is_valid():
            number.save()   
            return redirect('shifts_table.html')
        else:
            messages.success(request, ('Seems Like There Was An Error...'))
            return render(request, 'home.html', {})
    else:       
        return render(request, 'shifts_table.html', {})

home.html:

<form action="{% url 'shifts_table' %}" method='POST'>
    {% csrf_token %}
    <label for='number'>Number:</label>
    <input type="number" name="value" placeholder="2020" required><br/>
    <button type="submit">submit</button>
</form>

urls.py:

urlpatterns = [
    path('', views.home, name='home'),
    path('shifts_table', views.shifts_table, name='shifts_table'),
]

【问题讨论】:

  • 但如果我像下面这样的代码不会 - 当您运行该代码时会发生什么
  • ERR_CONNECTION_REFUSED .... 就像我对我们的同事 Amine 评论的那样,我想提交任何数字,将其发布并保存为时间变量“数字”,以便在 other.py 中进行一些简单的计算(将来)。是否可以在不创建对象和模型的情况下发布整数并保存它?
  • 您不能在一个请求中设置变量并在另一个请求中访问它。您可以将数据保存在会话、cookie 或缓存中,然后在另一个视图中重新获取。

标签: python django python-3.x django-templates django-views


【解决方案1】:

要保存变量,您可以简单地使用会话

request.session['number'] = number

然后你可以像使用任何其他变量一样使用 request.session['number']

【讨论】:

    【解决方案2】:
    number = request.POST['value']
    

    这将返回一个字符串,而字符串没有保存方法,所以它不起作用

    我认为您有一个由该编号引用的模型并将其保存到数据库中,您可以执行类似的操作

    object= yourmodel.objects.get(pk=number)
    object.save()
    

    字符串也没有is_valid()的定义,它用在表单中,在你的视图中没有实现

    保存到数据库后你必须重定向,只有在没有提交的情况下才会这样做

    最终代码:

    def shifts_table(request):
        if request.method == 'POST':
            number = request.POST['value']
            # check if number is valid (not empty and no spaces before or after)
            if not number.strip(): 
                object = yourmodel.objects.get(pk=number)
                object.save()
                return render(request, 'home.html', {})
            else:
                messages.success(request, ('Seems Like There Was An Error...'))
                return render(request, 'home.html', {})
        else:       
            return render(request, 'shifts_table.html', {})
    

    【讨论】:

    • 嗨,Amine,我只想提交任何数字,将其发布并保存为时间变量“数字”,以便在 other.py(将来)中进行一些简单的计算。是否可以发布一个整数并在没有对象和模型的情况下保存它?
    • 请看我的其他回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2021-12-21
    相关资源
    最近更新 更多