我正在尝试使用 Django 编写一本电子短语手册,以帮助人们学习语言。或者实际上是具有新功能的旧版本的新版本。无论如何,我在这里的前几米被严重困住了。
我已将一些对象添加到数据库并希望在“类别”URL 中显示它们。第一个网址 http://127.0.0.1:8000/工作得很好,给了我一个美妙的 Hello World 。但是,我需要将新应用程序连接到项目,当我尝试打开应用程序的 url 时 http://127.0.0.1:8000/categories/ ,浏览器给我这个:
TypeError at /categories/
sequence item 0: expected str instance, Category found
我的控制台提示应用程序的 view.py,并在其中提示第 9 行 output = ', '.join(categories)。我找不到任何问题。这是整个 views.py:
from django.http import HttpResponse
from django.shortcuts import render
from .models import Category
def category_list(request):
categories = Category.objects.all()
output = ', '.join(categories)
return HttpResponse(output)
这是应用程序的 url.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.category_list),
]
这是主要的 url.py:
from django.conf.urls import url, include
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^categories/', include('phrasebooktwo.urls')),
url(r'^admin/', admin.site.urls),
url(r'^$', views.hello_world),
]
这是项目树:
bigboy_phrasebook
├── bigboy_phrasebook
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── settings.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ ├── views.cpython-35.pyc
│ │ └── wsgi.cpython-35.pyc
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
└── phrasebooktwo
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-35.pyc
│ ├── admin.cpython-35.pyc
│ ├── models.cpython-35.pyc
│ ├── urls.cpython-35.pyc
│ └── views.cpython-35.pyc
├── admin.py
├── apps.py
├── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
│ └── __pycache__
│ ├── 0001_initial.cpython-35.pyc
│ └── __init__.cpython-35.pyc
├── models.py
├── tests.py
├── urls.py
└── views.py
如何让我的类别页面正常工作?预先感谢您的帮助。
请您参考如下方法:
在使用 join() 之前,您必须使用 str() 或 repr() 或任何其他返回类别对象字符串的方法。让我通过一个简单的例子来解释这一点:
class Category:
def __init__(self, name):
self.name = name
items = [Category('jam')]
out = ', '.join(items)
print(out)
如果你运行这段代码,你会得到“TypeError: sequence item 0: expected str instance, Category found”
因此,您必须按如下方式修改代码:
class Category:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
items = [Category('jam').__str__()]
out = ', '.join(items)
print(out)
