“str”对象没有属性“method”

The*_*ist 0 python django django-forms

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

'str' object has no attribute 'method'
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是,我看不出设置此页面的方式与设置另一个类似页面的方式没有任何区别;然而,那个工作得很好,而这个却不行。

我使用的代码如下:

主要/视图.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})
Run Code Online (Sandbox Code Playgroud)

/main/forms.py

class WordListForm(forms.Form):
    word_list = forms.CharField(label="Word List")
Run Code Online (Sandbox Code Playgroud)

主/urls.py

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

urlpatterns = [
    url(r'alphabetize', views.alphabetize, name='alphabetize'),
]
Run Code Online (Sandbox Code Playgroud)

主要/按字母顺序排列.py

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

模板/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 %}
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 5

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

您应该重命名其中之一。