2016-07-18 19 views
0

何時間も何時間も試しても、私はまだそれが起こるようには見えません。djangoを使ってログインフォームを入れる方法

私は基本的にこのポストフォームと共にdjangoを使ってこの.post_list.html内にログインフォームを入れようとしています。 (SO 2つの形態がある)

これはviews.py

from django.contrib import messages 
from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render, get_object_or_404, redirect 
from django.contrib.auth import authenticate, login 
from django.contrib.auth import login 
from django.http import HttpResponseRedirect 
from django.template.response import TemplateResponse 
from django.contrib.auth.decorators import login_required 

from .forms import PostForm, AuthenticationForm 
from .models import Post 

def post_detail(request, id=None): 
    # instance = Post.objects.get(id=1) 
    instance = get_object_or_404(Post, id=id) 
    context = { 
     "title": instance.title, 
     "instance": instance, 
    } 
    return render(request, "post_detail.html", context) 

def post_list(request): 
    if request.method == "POST": 
     form = AuthenticationForm(request, data=request.POST) 

     if form.is_valid(): 
      login(request, form.get_user()) 
      return HttpResponseRedirect('/post-list/') 
     else: 
      form = AuthenticationForm(request) 
      return TemplateResponse(request, 'login.html', {'form': form}) 
    else: 
     form = AuthenticationForm() 

    postform = PostForm(request.POST or None) 

    if postform.is_valid(): 
     instance = postform.save(commit=False) 
     print (postform.cleaned_data.get("title")) 
     instance.save() 
     # message success 
     messages.success(request, "Successfully Created") 
     return HttpResponseRedirect(instance.get()) 
    # else: 
     #messages.error(request, "Not Successfully Created") 
    queryset = Post.objects.all()#.order_by("-timestamp") 
    context = { 
     "object_list": queryset, 
     "title": "List", 
     "form": postform, 
     "form2": form 
    } 
    return render(request, "post_list.html", context) 

であり、これはforms.py

from django import forms 

from .models import Post 

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = [ 
     "title", 
     "content" 
    ] 

from django.contrib.auth import authenticate 

class AuthenticationForm(forms.Form): 
    username = forms.CharField(max_length=254) 
    password = forms.CharField(widget=forms.PasswordInput) 

    def clean(self): 
     username = self.cleaned_data['username'] 
     password = self.cleaned_data['password'] 
     user = authenticate(username=username, password=password) 
     if user is None: 
      raise forms.ValidationError('invalid_login') 

     return self.cleaned_data 

とpost_lost.html

{% extends "base.html" %} 
{% block content %} 

<form method="post" action=""> 
    {% csrf_token %} 
    Username: {{ form.username }} {{ form.username.errors }}<br> 
    Password: {{ form.password }} {{ form.password.errors }}<br> 
    {{ form.errors }}<br> 
    <input type="submit" value="login" /> 
</form> 

<div class='two columns right mgr'> 
    <h1>Form</h1> 
    <form method='POST' action=''>{% csrf_token %} 
     {{ form.as_p }} 
     <input class="button-primary" type='submit' value='Create Post' /> 
    </form> 
</div> 

<div class='four columns left'> 
    <h1>{{ title }}</h1> 

    {% for obj in object_list %} 
     <div class="row"> 
      <div> 
       <a href='{{ obj.get_absolute_url }}'> 
       <div class="thumbnail"> 
        <!--<img src="..." alt="...">!--> 
         <div class="caption"> 
         <h3>{{ obj.title }}<small> {{ obj.timestamp|timesince }} ago</small></h3> 
         <p>{{ obj.content|linebreaks|truncatechars:120 }}</p> 
         <!-- <p><a href='{{ obj.get_absolute_url }}' class="btn btn-primary" role="button">View</a> </p>--> 
        </div> 
       </div></a> 
      </div> 
      <hr /> 
     </div> 
    {% endfor %} 
</div> 

{% endblock content %} 

可能性がありますあなたは私を助けてください?ありがとう。

+0

@jape申し訳ありませんが、状況を説明しませんでした。ポストフォームは作業中ですが、ログインフィールドはhtmlでは表示されません。 –

+0

"form":postform、 "form2":form'をコンテキストに渡しています。ログインフォームはform2のようです。 {{form2.username}}などを使用しようとするとどうなりますか? – Paul

答えて

1

名前のためにこの問題が発生していると思います。テンプレートにformがpostformですので、あなたが失敗form.usernameアクセスしようとすると、そう

form = AuthenticationForm() 
postform = PostForm(request.POST or None) 
... 
context = { 
      "object_list": queryset, 
      "title": "List", 
      "form": postform, 
      "form2": form 
     } 

: あなたは、コンテキストに次のものを渡します。そしてpostformには 'usarname'フィールドはありません。あなたはこれを試してみてください似

だから、見て:

<form method="post" action=""> 
    {% csrf_token %} 
    Username: {{ form2.username }} {{ form2.username.errors }}<br> 
    Password: {{ form2.password }} {{ form2.password.errors }}<br> 
    {{ form2.errors }}<br> 
    <input type="submit" value="login" /> 
</form> 
+0

あなたは私の人生を救った!まったくそれを知らなかった。今はローカルサーバーで正常に動作しているようです。何らかの理由で、このコードをサーバーにアップロードすると、ログインフォームは再び表示されません。このviews.pyを見て、なぜそれがサーバー上で動作していないのか教えてください。 https://dpaste.de/VpJ7#L7,11,20,24 post_list.htmlは上記と同じです。 –

関連する問題