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)
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? –
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. –