【问题标题】:Class view returns object has no attribute 'rindex' error类视图返回对象没有属性“rindex”错误
【发布时间】:2016-08-19 04:54:00
【问题描述】:

我正在尝试将我的 function based view 重写为 class based view。它引发了这个错误:

.../test/User1

'UserDetailView' 对象没有属性 'rindex'

问题可能很明显,我是class based views的新手。

那么如何使用 url .../test/username 获取任何个人资料?

我的新观点:

class UserDetailView(DetailView):
    model = User
    def get_object(self, queryset=None):
        return get_object_or_404(self.model, pk=self.kwargs["pk"])

URLS.PY:

url(r'^test/(?P<username>[a-zA-Z0-9]+)/$', views.UserDetailView(),name="user_detail"),

和模板:

{% extends "base.html" %}

{% block content %}

{{ userprofile.as_p }}
{% endblock %}

我的旧观点是这样的:

def get_user_profile(request, username):
    user = User.objects.get(username=username)

    jobs = user.jobs.all()
    table = MyJobsTable(jobs)

    context = {
        'my_jobs': table,
        "user": user
    }
    return render(request, 'auth/profiles/my-profile.html', context=context)

还有 HTML:

{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% load render_table from django_tables2 %}
{% block content %}
    {% if user.is_authenticated %}
        <h3>{% if user.userprofile.is_translator %} Prekladateľský účet: {% else %} Štandardný
            účet: {% endif %}{{ user.username }} </h3>
        <ul>
            <li>Username: {{ user.username }}</li>
            <li>First name: {{ user.first_name }}</li>
            <li>Last name: {{ user.last_name }}</li>
            <li>Email: {{ user.email }}</li>
            <li>Telephone: {{ user.userprofile.telephone }}</li>
            <li>Languages: {{ user.userprofile.languages.as_p }}</li>
            {#            TODO: DOPLNIT ATRIBUTY + ked je aj translator#}
        </ul>
        {% if user.jobs %}
            <p>My Jobs</p>
            {% render_table my_jobs %}
        {% else %}
            <p>You have no jobs</p>
        {% endif %}
        <form class="navbar-form navbar-right" action="/edit-profile" method="get">
            <button type="submit" class="btn btn-success">Edit Your Profile</button>
        </form>
        <form class="navbar-form navbar-right" action="/register-as-translator" method="get">
            <button type="submit" class="btn btn-success">Become A Translator</button>
        </form>
    {% endif %}
{% endblock %}

URLS.PY:

url(r'^profile/(?P<username>[a-zA-Z0-9]+)/$', views.get_user_profile)

【问题讨论】:

    标签: python django django-views django-urls django-class-based-views


    【解决方案1】:

    问题出在您的 urls.py 中。对于基于类的视图,您始终需要使用as_view classmethod

    url(r'^test/(?P<username>[a-zA-Z0-9]+)/$', views.UserDetailView.as_view(), name="user_detail"),
    

    【讨论】:

    • 谢谢,这似乎可行,但现在又引发了另一个错误:必须使用对象 pk 或 slug 调用通用详细视图 UserDetailView。我想我不能使用用户名,但是如何使用 slug?还是那个不同的问题?
    • 您应该在类定义中设置slug_field = 'username'slug_url_kwarg = 'username'。请注意,您的 get_object 方法已损坏,但也毫无意义;你应该删除它。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    相关资源
    最近更新 更多