2016-04-18 201 views
1

私はすべてを試してきましたが、なぜそれが表示されないのかわかりません。私はこのサイトの至るところで運がないところで検索しました。Django - テンプレート上にフォームが表示されない

例外値:
get_profileを(予期しないキーワード引数「ユーザ名」

はここに私のコードのGot):

私はそれを言って、私にget_profileではTypeErrorを与えるよりも、クリックしたときにボタンが現れますが、

models.py

class CustomUser(AbstractBaseUser): 
    email = models.EmailField('email address', unique=True, db_index=True) 
    username = models.CharField('username', max_length=50, unique=True, db_index=True) 
    first_name = models.CharField(max_length=50, blank=False) 
    last_name = models.CharField(max_length=50, blank=False) 
    joined = models.DateTimeField(auto_now_add=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = [] 

    objects = CustomUserManager() 

    def __unicode__(self): 
     return self.username 

forms.py

from django import forms 
from apps.accounts.models import CustomUser 


class RegistrationForm(forms.ModelForm): 
    email = forms.EmailField(widget=forms.TextInput, label='email') 
    username = forms.CharField(widget=forms.TextInput, label='username') 
    password1 = forms.CharField(widget=forms.PasswordInput, label='Enter your password') 
    password2 = forms.CharField(widget=forms.PasswordInput, label='Re-type your password') 
    first_name = forms.CharField(widget=forms.TextInput, label='First Name') 
    last_name = forms.CharField(widget=forms.TextInput, label='Last Name') 

    class Meta: 
     model = CustomUser 
     fields = ['email', 'username', 'password1', 'password2', 'first_name', 'last_name'] 

    def clean(self, password1, password2): 
     cleaned_data = super(RegistrationForm, self).clean() 
     if password1 in self.cleaned_data and password2 in self.cleaned_data: 
      if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
       raise forms.ValidationError("Passwords don't match. Please enter both fields again") 
     return self.cleaned_data 

    def save(self, commit=True): 
     user = super(RegistrationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data['password1']) 
     if commit: 
      user.save() 
     return user 

views.py

def register(request): 
    """ 
    User Registration View 
    """ 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      CustomUser = form.save() 
      CustomUser.save() 
      return redirect('home.html') 
    else: 
     form = RegistrationForm() 
    return render_to_response('register.html', { 
     'form': form, 
    }, context_instance=RequestContext(request)) 

def get_profile(request): 
    username = CustomUser.username 
    return render_to_response(request, 'profile.html', {'username': username}) 

urls.py

urlpatterns = patterns ('', 
    url(r'register$', 'apps.accounts.views.register', name='register'),) 

register.html

{% load staticfiles %} 
{% load crispy_forms_tags %} 

<!DOCTYPE html> 
<html lang="en"> 
<body> 
{% block body %} 

<form method='POST' action="register" enctype= 'multipart/form-data'>{% csrf_token %} 
<table>{{ form.ast_table}}</table> 
<input type='submit' class="btn btn-default" value="Register" /> 
</form> 
{% endblock %} 
</body> 
</html> 
+0

は完全なコードを提供する必要があります。誰が 'get_profile'を呼びますか? – Rohan

答えて

1

それはあなたがget_profileビュー機能のための右の署名を持っていないようです。

あなたのURLを確認する必要がありますもしそうなら、あなたはおそらく

url(r'^profile/(?P<username>\w+/$', get_profile), 

のようなものを持って、あなたのビューが

def get_profile(request, username): 
    #you can get the user 
    user = CustomUser.objects.get(username=username) 

    return render_to_response(request, 'profile.html', {'username': username, 'user': user}) 
+0

大変な人は、それは働いた。どうもありがとうございます! – ngx311

+0

ニース!今あなたは答えを受け入れる必要があります:-) – luc

0

CustomUserクラスです。実際にユーザー名を取得する前にインスタンスをフェッチする必要があります。

例:

CustomUser.objects.get(pk=1).username 

はあなたの最初のユーザーのユーザー名を与えます。

また、その{{form.as_table}}ことになっていないast_table

+0

大変な人よ、それはうまくいった。どうもありがとうございます! – ngx311

関連する問題