1

Ich versuche meine function based view zu class based view umzuschreiben. Es stellt sich diesen Fehler:Klassenansicht returns Objekt hat kein Attribut 'rindex' Fehler

.../test/User1 

'UserDetailView' object has no attribute 'rindex'

Das Problem wohl offensichtlich ist, dass ich in class based views bin neu.

Also was zu tun, um jedes Profil mit URL .../test/username zu bekommen?

Meine neue Ansicht:

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"), 

Und Vorlage:

{% extends "base.html" %} 

{% block content %} 

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

Meine alte Ansicht ist dies:

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) 

Und 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) 

Antwort

1

Das Problem ist in Ihrem urls.py. Mit einer klassenbasierten Ansicht, müssen Sie immer die as_view classmethod:

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

Danke, scheint dies zu funktionieren, aber es stellt sich nun einen anderen Fehler: Allgemeindetailansicht UserDetailView muss entweder mit einem Objekt pk oder eine Schnecke genannt werden. Ich nehme an, dass ich keinen Benutzernamen benutzen kann, aber wie man eine Schnecke benutzt? Oder ist das ein anderes Problem? –

+0

Sie sollten 'slug_field = 'username'' und' slug_url_kwarg =' username'' in Ihrer Klassendefinition angeben. Und beachte, dass deine 'get_object' Methode kaputt ist, aber auch sinnlos; Sie sollten es löschen. –