【问题标题】:'str' object has no attribute 'method'“str”对象没有属性“method”
【发布时间】:2018-04-18 15:17:54
【问题描述】:

我正在尝试在 python 视图中访问 request.method,但出现错误

'str' object has no attribute 'method'

真正奇怪的是,我看不出我设置此页面的方式与设置另一个类似页面的方式之间没有区别;但是那个工作正常,而这个不行。

我使用的代码如下:

main/views.py:

from .alphabetize import alphabetize
from .forms import WordListForm

def alphabetize(request):
    if request.method == "POST":
        form = WordListForm(request.POST)
        if form.is_valid():
            word_list = alphabetize(form.cleaned_data['word_list'])
            return render(request, 'main/alphabetize.html', {'form': form, 'word_list': word_list})
    else:
        form = WordListForm()
        return render(request, 'main/alphabetize.html', {'form': form})

/main/forms.py

class WordListForm(forms.Form):
    word_list = forms.CharField(label="Word List")

main/urls.py

from django.conf.urls import url
from main import views

urlpatterns = [
    url(r'alphabetize', views.alphabetize, name='alphabetize'),
]

main/alphabetize.py

    def alphabetize(s):
        word_list = []
        for word in s.split(','):
            word_list.append(word.strip())
        word_list.sort()
        return ', '.join(word_list)

模板/main/alphabetize.html

{% extends "base.html" %}

{% block content %}
    <form action="/alphabetize" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>

    <p>Your list alphabetized: {{ alpha_list }}</p>
{% endblock content %}

/templates/base.html

{% load staticfiles %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Awesome Django Page</title>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
    <div class="main">
        {% block content %}{% endblock content %}
    </div>
</body>
</html>

似乎由于某种原因 request 是一个字符串而不是一个 HttpRequest 对象,但我不知道为什么会这样。

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    您有两个不同的函数,称为alphabetize;你的观点和你的效用函数。因此,您的视图正在调用自身,而不是其他函数。

    您应该重命名其中之一。

    【讨论】:

      【解决方案2】:

      您的视图名称会覆盖导入的函数 alphabetize。更改视图名称以修复:

      from .alphabetize import alphabetize
      from .forms import WordListForm
      
      def alphabetize_view(request):
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 2016-09-20
        • 2019-03-25
        • 2017-05-13
        • 2014-04-28
        • 2015-05-15
        • 2019-06-20
        相关资源
        最近更新 更多