2016-05-22 29 views
1

urls.pyget_absolute_url與參數

urlpatterns = [ 
     ... 
     url(r'^profile/$', profile.profile, name='profile'), 
] 

model

class Reg(models.Model): 
    name = models.CharField(max_length=32, primary_key=True) 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
     related_name='%(app_label)s_%(class)s_reg', null=True) 
    ... 

    def get_absolute_url(self): 
     return reverse('core:profile', ???) 

views

@login_required 
def profile(request): 
    context_dict = {} 
    u = User.objects.get(username=request.user) 
    context_dict['user'] = u 
    r = reg.Reg.objects.get(user=u) 
    context_dict['reg'] = r 
    return render(request, 'core/reg.html', context_dict) 

是否有可能使用get_absolute_url到的意見不同的配置?例如,當你看到「John」配置文件時,你可以點擊「查看現場」並獲取帶有john數據的配置文件頁面,而不是你的。

+0

你會用什麼來查詢John的數據,id或名字?或者,您可以更新您的問題與更多的領域從您的模型 –

+0

我可以使用兩個....編輯:現在我要更新。完成。 – fabio

+1

目前,您所顯示的網址或視圖中沒有任何條款可以查看除您登錄的用戶以外的任何用戶的個人資料。 – Ben

回答

2

你的意見必須能夠接受一個額外的參數,最好的用戶ID,因爲名稱通常包含空格:

from django.shortcuts import get_object_or_404 

@login_required 
def profile(request, user_id): 
    context_dict = {} 
    u = get_object_or_404(User, pk=user_id) 
    context_dict['user'] = u 
    r = reg.Reg.objects.get(user=u) 
    context_dict['reg'] = r 
    return render(request, 'core/reg.html', context_dict) 

那麼你urls.py變爲:

urlpatterns = [ 
     ... 
     url(r'^profile/(?P<user_id>[0-9]+)/$', profile.profile, name='profile'), 
] 

最後你models.pyget_absolute_url方法:

class Reg(models.Model): 
    name = models.CharField(max_length=32, primary_key=True) 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, 
     related_name='%(app_label)s_%(class)s_reg', null=True) 
    ... 

    def get_absolute_url(self): 
     return reverse('core:profile', user_id=self.id)