' STR'对象没有属性'方法'

时间:2018-04-18 15:17:55

标签: python django django-forms

我正在尝试在python视图中访问request.method,但我收到了错误

'str' object has no attribute 'method'

真正奇怪的是,我可以看到我如何设置此页面以及如何设置另一个类似页面之间没有区别;然而,一个工作正常,而这一个没有。

我使用的代码如下:

主/ 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")

主/ urls.py

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

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

主/ alphabetize.py

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

模板/主/ 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对象,但我无法弄清楚为什么会这样。

2 个答案:

答案 0 :(得分:2)

您有两个名为alphabetize的不同功能;您的观点和实用功能。因此,您的观点是自称,而不是其他功能。

您应该重命名其中一个。

答案 1 :(得分:0)

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

from .alphabetize import alphabetize
from .forms import WordListForm

def alphabetize_view(request):