【问题标题】:Django, post method not allowed (405) Detail ViewDjango,不允许发布方法(405)详细视图
【发布时间】:2016-10-12 08:17:36
【问题描述】:

我是 django 新手,正在尝试构建一个 BLOG 应用程序。 最后一步是能够在详细的博客文章中创建评论, 我试图将用于创建评论的表单放在同一个详细信息视图中 作为 blog_post 和 cmets, 当我尝试创建评论时,控制台中出现表单错误: 不允许发布方法,我尝试了所有方法但仍然无法正常工作 请帮忙,我非常感谢你的帮助 我的代码

观看次数

from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.http import HttpResponse
from django.views.generic import View
from django.views.generic.base import TemplateView, TemplateResponseMixin, ContextMixin
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.shortcuts import render
from django.utils.decorators import method_decorator

from django.contrib.contenttypes.models import ContentType



from .models import blog_post, Category
from .forms import blog_postForm


from comments.models import Comment
from comments.forms import CommentForm






class CategoryListView(ListView):
    model = Category
    queryset = Category.objects.all()
    template_name = "blog/category_list.html"



class CategoryDetailView(DetailView):
    model = Category

    def get_context_data(self, *args, **kwargs):
        context = super(CategoryDetailView, self).get_context_data(*args, **kwargs)
        obj = self.get_object()
        blogpost_set = obj.blog_post_set.all()
        default_blogpost = obj.default_category.all()
        blogposts = ( blogpost_set | default_blogpost ).distinct()
        context["blogposts"] = blogposts
        return context



class LoginRequiredMixin(object):
     @classmethod
     def as_view(cls, **kwargs):
       view = super(LoginRequiredMixin, cls).as_view(**kwargs)
       return login_required(view)

    #@method_decorator(login_required)
    #def dispatch(self, request, *args, **kwargs):
    #    return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)



class blog_postCreateView(LoginRequiredMixin, CreateView):
    #model = blog_post
    form_class = blog_postForm
    template_name = "form.html"
    #fields = ["title", "content"]
    def get_success_url(self):
        return reverse("blog_post_list")

    # @method_decorator(login_required)
    # def dispatch(self, request, *args, **kwargs):
    #   return super(MyView, self).dispatch(request, *args, **kwargs)    


class blog_postListView(ListView):

    model = blog_post
    def get_queryset(self, *args, **kwargs):
        qs = super(blog_postListView, self).get_queryset(*args, **kwargs).order_by("-timestamp")
        return qs

class blog_postDetailView(DetailView):

    model = blog_post

    def get_context_data(self, *args, **kwargs):
        context = super(blog_postDetailView, self).get_context_data(*args, **kwargs)
        obj = self.get_object()
        #default_blogpost = obj.default_category.all()
        #blogposts = ( blogpost_set | default_blogpost ).distinct()
        # content_type = ContentType.objects.get_for_model(blog_post)
        # obj_id = obj.id
        # comments = Comment.objects.filter(content_type=content_type, object_id= obj_id)

        initial_data = {
            "content_type": obj.get_content_type,
            "object_id": obj.id
        }   

        form = CommentForm(self.request.POST or None, initial=initial_data)
        if form.is_valid():
            c_type = form.cleaned_data.get("content_type")
            content_type = ContentType.objects.get(model=c_type)
            obj_id = form.cleaned_data.get('object_id')
            content_data = form.cleaned_data.get("content")
            new_comment, created = Comment.objects.get_or_create(
                            user = request.user,
                            content_type= content_type,
                            object_id = obj_id,
                            content = content_data
                        )

        comments = obj.comments.order_by("-timestamp")
        context['comments'] = comments
        context['comment_form'] = form
        return context



class AboutPageView(TemplateView):

    template_name = "about.html"


class ContactPageView(TemplateView):

    template_name = "contact.html"   



class IndexView(ListView):
    context_object_name = 'home_list'    
    template_name = 'blog/index.html'
    queryset = blog_post.objects.all().order_by("-timestamp")

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['categories'] = Category.objects.all()
        # And so on for more models
        return context

blog_post_detail.html

{% extends "base.html" %}

{% load crispy_forms_tags %}







{% block content %}


            <!-- Blog Post Content Column -->
            <div class="col-lg-8">

                <!-- Blog Post -->

                <!-- Title -->
                <h1>{{ object.title }}</h1>

                <!-- Author -->
                <p class="lead">
                    by <a href="#">Start Bootstrap</a>
                </p>

                <hr>

                <!-- Date/Time -->
                <p><span class="glyphicon glyphicon-time"></span> Posted on {{ object.timestamp|date }} </p>

                <hr>

                <!-- Preview Image -->
                <!-- <img class="img-responsive" src="http://placehold.it/900x300" alt=""> -->
                        {% if object.image %}
                    <img src='{{ object.image.url }}' class='img-responsive' />
                        {% endif %}
                <hr>

                <!-- Post Content -->
                <div class="content-markdown"><p class="lead">{{ object.content }}</p></div>

                <hr>

                <!-- Blog Comments -->





                <!-- Comments Form LEAVE A COMMENT -->
                <div class="well">
                    <h4>Leave a Comment:</h4>
 <!--                    <form role="form">
                        <div class="form-group">
                            <textarea class="form-control" rows="3"></textarea>
                        </div>
                        <button type="submit" class="btn btn-primary">Submit</button>
                    </form> -->
                        <form method="POST" action='.'> {% csrf_token %}
                            {{ comment_form }}
                        <input type='submit' value='Post comment' class='btn btn-default'>
                        </form>
                        <hr/>

                </div>

                <hr>

                <!-- Posted Comments -->
                <!-- Comment -->
                {% for comment in comments %}
                <div class="media">
                    <a class="pull-left" href="#">
<!--                         {% if object.image %}
                    <img src='{{ object.image.url }}' class='img-responsive' />
                        {% endif %} -->
                         <img class="media-object" src="http://placehold.it/64x64" alt=""> 
                    </a>
                    <div class="media-body">
                        <h4 class="media-heading">{{ comment.content_object }} 
                            <small> by {{ comment.user }} | {{ comment.timestamp|timesince }} ago </small>
                        </h4>
                        {{ comment.content }}
                        <!-- Nested Comment -->
<!--                         <div class="media">
                            <a class="pull-left" href="#">
                                <img class="media-object" src="http://placehold.it/64x64" alt="">
                            </a>
                            <div class="media-body">
                                <h4 class="media-heading">Nested Start Bootstrap
                                    <small>August 25, 2014 at 9:30 PM</small>
                                </h4>
                                Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
                            </div>
                        </div> -->
                        <!-- End Nested Comment -->
                    </div>
                </div>
                {% endfor %}
            </div>


           <!-- Blog Sidebar Widgets Column -->
            <div class="col-md-4">

                <!-- Blog Search Well -->
                <div class="well">
                    <h4>Blog Search</h4>
                    <div class="input-group">
                        <input type="text" class="form-control">
                        <span class="input-group-btn">
                            <button class="btn btn-default" type="button">
                                <span class="glyphicon glyphicon-search"></span>
                        </button>
                        </span>
                    </div>
                    <!-- /.input-group -->
                </div>

                <!-- Blog Categories Well -->
                <div class="well">
                    <h4>Blog Categories</h4>
                    <div class="row">
                        <div class="col-lg-6">
                            <ul class="list-unstyled">
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                            </ul>
                        </div>
                        <!-- /.col-lg-6 -->
                        <div class="col-lg-6">
                            <ul class="list-unstyled">
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                                <li><a href="#">Category Name</a>
                                </li>
                            </ul>
                        </div>
                        <!-- /.col-lg-6 -->
                    </div>
                    <!-- /.row -->
                </div>

                <!-- Side Widget Well -->
                <div class="well">
                    <h4>Side Widget Well</h4>
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore, perspiciatis adipisci accusamus laudantium odit aliquam repellat tempore quos aspernatur vero.</p>
                </div>

            </div>

        </div>
        <!-- /.row -->
            {% endblock content %}

博客模型

from __future__ import unicode_literals

from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models

from django.db.models.signals import pre_save, post_save
from django.utils.text import slugify
# Create your models here.

from comments.models import Comment
from django.contrib.contenttypes.models import ContentType


def upload_location(instance, filename):
    #filebase, extension = filename.split(".")
    #return "%s/%s.%s" %(instance.id, instance.id, extension)
    return "%s/%s" %(instance.id, filename)


class blog_post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    title = models.CharField(max_length=120)
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    image = models.ImageField(upload_to=upload_location, null=True, blank=True, width_field="width_field", height_field="height_field")
    slug = models.SlugField(unique=True)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
    categories = models.ManyToManyField('Category', blank=True)
    default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)

    def __unicode__(self):
        return self.title

    def __str__(self):
        return self.title   

    def get_absolute_url(self):
        return reverse("blog_post_detail", kwargs={"slug": self.slug})

    @property
    def comments(self):
        instance = self
        qs = Comment.objects.filter_by_instance(instance)
        return qs

    @property
    def get_content_type(self):
        instance = self
        content_type = ContentType.objects.get_for_model(instance.__class__)
        return content_type





def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug
    qs = blog_post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" %(slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)



pre_save.connect(pre_save_post_receiver, sender=blog_post)


class Category(models.Model):
    title = models.CharField(max_length=120, unique=True)
    slug = models.SlugField(unique=True)
    description = models.TextField(null=True, blank=True)
    active = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __unicode__(self):
        return self.title


    def get_absolute_url(self):
        return reverse("category_detail", kwargs={"slug": self.slug })

评论模型

from __future__ import unicode_literals

from django.conf import settings

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

from django.db import models



#from blog.models import blog_post


class CommentManager(models.Manager):
    def filter_by_instance(self, instance):
        content_type = ContentType.objects.get_for_model(instance.__class__)
        obj_id = instance.id
        qs = super(CommentManager, self).filter(content_type=content_type, object_id= obj_id)
        return qs



class Comment(models.Model):
    user        = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    #post        = models.ForeignKey(blog_post)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    content     = models.TextField()
    timestamp   = models.DateTimeField(auto_now_add=True)


    objects = CommentManager()


    def __unicode__(self):
        return str(self.user.username)

    def __str__(self):
        return str(self.user.username)

非常感谢您的帮助

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    如果你想在视图中添加编辑功能,你需要使用UpdateView 而不是DetailView

    示例

    class blog_postDetailView(UpdateView):
        form_class = CommentForm
        model = blog_post
    
        def get_initial(self):
            initial_data = super(blog_postDetailView, self).get_initial()
            obj = self.get_object()
            initial_data.update({
                "content_type": obj.get_content_type,
                "object_id": obj.id
            })
            return initial_data 
    
        def get_context_data(self, *args, **kwargs):
            context = super(blog_postDetailView, self).get_context_data(*args, **kwargs)
            obj = self.get_object()
            #default_blogpost = obj.default_category.all()
            #blogposts = ( blogpost_set | default_blogpost ).distinct()
            # content_type = ContentType.objects.get_for_model(blog_post)
            # obj_id = obj.id
            # comments = Comment.objects.filter(content_type=content_type, object_id= obj_id)
            comments = obj.comments.order_by("-timestamp")
            context['comments'] = comments
            # your form in template should be called form, doing this line for compatability
            context['comments_form'] = context['form']
            return context
    
        def form_valid(self, form):
            c_type = form.cleaned_data.get("content_type")
            content_type = ContentType.objects.get(model=c_type)
            obj_id = form.cleaned_data.get('object_id')
            content_data = form.cleaned_data.get("content")
            new_comment, created = Comment.objects.get_or_create(
                            user = request.user,
                            content_type= content_type,
                            object_id = obj_id,
                            content = content_data
                        )
            return super(blog_postDetailView, self).form_valid(form)
    

    【讨论】:

    • 嗨,感谢您的回答,但我不能使用 UpdateView 代替 DetailView,导致出现错误:禁止使用不带“字段”属性的 ModelFormMixin(blog_postDetailView 的基类)。我猜是因为,我希望用户可以在博客文章的“Detailview”模板上创建评论,所以仍然需要使用 DetailView,我还能做什么?
    • @RobertF。只需将form 添加到此视图中就可以了
    • 我在 DetailView 中添加了 form = commenForm,你的意思是?但还是一样,当我想在“详细视图”模板 (blog_post_detail.html) 错误中使用表单创建评论时,仍然在控制台中:不允许发布方法 405
    • @RobertF。不,我的意思是向 UpdateView 添加表单
    • 我真的很抱歉,我不明白,可以这么好心并为/你的意思的代码发布固定的 DetailVIew,非常感谢,spasibooooo :)
    【解决方案2】:

    我不得不使用forms.ModelForm。唯一的问题是现在,我需要登录才能发布/创建 评论成功,否则会出现此错误:'AnonymousUser' object is not iterable 有人对此有解决方案吗?

    观看次数

    from django.contrib.auth.decorators import login_required
    from django.core.urlresolvers import reverse
    from django.http import HttpResponse
    from django.views.generic import View
    from django.views.generic.base import TemplateView, TemplateResponseMixin, ContextMixin
    
    from django.views.generic.detail import DetailView
    from django.views.generic.list import ListView
    from django.views.generic.edit import CreateView, UpdateView, DeleteView
    from django.shortcuts import render
    from django.utils.decorators import method_decorator
    
    from django.contrib.contenttypes.models import ContentType
    
    
    
    from .models import blog_post, Category
    from .forms import blog_postForm
    
    
    from comments.models import Comment
    from comments.forms import CommentForm
    
    
    
    
    
    
    class CategoryListView(ListView):
        model = Category
        queryset = Category.objects.all()
        template_name = "blog/category_list.html"
    
    
    
    class CategoryDetailView(DetailView):
        model = Category
    
        def get_context_data(self, *args, **kwargs):
            context = super(CategoryDetailView, self).get_context_data(*args, **kwargs)
            obj = self.get_object()
            blogpost_set = obj.blog_post_set.all()
            default_blogpost = obj.default_category.all()
            blogposts = ( blogpost_set | default_blogpost ).distinct()
            context["blogposts"] = blogposts
            return context
    
    
    
    class LoginRequiredMixin(object):
         @classmethod
         def as_view(cls, **kwargs):
           view = super(LoginRequiredMixin, cls).as_view(**kwargs)
           return login_required(view)
    
        #@method_decorator(login_required)
        #def dispatch(self, request, *args, **kwargs):
        #    return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
    
    
    
    class blog_postCreateView(LoginRequiredMixin, CreateView):
        #model = blog_post
        form_class = blog_postForm
        template_name = "form.html"
        #fields = ["title", "content"]
        def get_success_url(self):
            return reverse("blog_post_list")
    
        # @method_decorator(login_required)
        # def dispatch(self, request, *args, **kwargs):
        #   return super(MyView, self).dispatch(request, *args, **kwargs)    
    
    
    class blog_postListView(ListView):
    
        model = blog_post
    
        def get_queryset(self, *args, **kwargs):
            qs = super(blog_postListView, self).get_queryset(*args, **kwargs).order_by("-timestamp")
            return qs
    
    # class blog_postDetailView(DetailView):
    
    #     model = blog_post
    
    #     def get_context_data(self, *args, **kwargs):
    #         context = super(blog_postDetailView, self).get_context_data(*args, **kwargs)
    #         obj = self.get_object()
    #         #default_blogpost = obj.default_category.all()
    #         #blogposts = ( blogpost_set | default_blogpost ).distinct()
    #         # content_type = ContentType.objects.get_for_model(blog_post)
    #         # obj_id = obj.id
    #         # comments = Comment.objects.filter(content_type=content_type, object_id= obj_id)
    
    #         initial_data = {
    #             "content_type": obj.get_content_type,
    #             "object_id": obj.id
    #         }   
    
    #         form = CommentForm(self.request.POST or None, initial=initial_data)
    #         if form.is_valid():
    #             c_type = form.cleaned_data.get("content_type")
    #             content_type = ContentType.objects.get(model=c_type)
    #             obj_id = form.cleaned_data.get('object_id')
    #             content_data = form.cleaned_data.get("content")
    #             new_comment, created = Comment.objects.get_or_create(
    #                             user = request.user,
    #                             content_type= content_type,
    #                             object_id = obj_id,
    #                             content = content_data
    #                         )
    
    #         comments = obj.comments.order_by("-timestamp")
    #         context['comments'] = comments
    #         context['comment_form'] = form
    #         return context
    
    
    
    class blog_postDetailView(UpdateView):
        form_class = CommentForm
        model = blog_post
        template_name = 'blog/blog_post_detail.html'
    
        def get_initial(self):
            initial_data = super(blog_postDetailView, self).get_initial()
            obj = self.get_object()
            initial_data.update({
                "content_type": obj.get_content_type,
                "object_id": obj.id
            })
            return initial_data 
    
        def get_context_data(self, *args, **kwargs):
            context = super(blog_postDetailView, self).get_context_data(*args, **kwargs)
            obj = self.get_object()
            #default_blogpost = obj.default_category.all()
            #blogposts = ( blogpost_set | default_blogpost ).distinct()
            # content_type = ContentType.objects.get_for_model(blog_post)
            # obj_id = obj.id
            # comments = Comment.objects.filter(content_type=content_type, object_id= obj_id)
            comments = obj.comments.order_by("-timestamp")
            context['comments'] = comments
            # your form in template should be called form, doing this line for compatability
            context['comments_form'] = context['form']
            return context
    
        def form_valid(self, form):
            c_type = form.cleaned_data.get("content_type")
            content_type = ContentType.objects.get(model=c_type)
            obj_id = form.cleaned_data.get('object_id')
            content_data = form.cleaned_data.get("content")
            new_comment, created = Comment.objects.get_or_create(
                            user = self.request.user,
                            content_type= content_type,
                            object_id = obj_id,
                            content = content_data
                        )
            return super(blog_postDetailView, self).form_valid(form)
    
    
    
    
    
    
    
    
    class AboutPageView(TemplateView):
    
        template_name = "about.html"
    
    
    class ContactPageView(TemplateView):
    
        template_name = "contact.html"   
    
    
    
    class IndexView(ListView):
        context_object_name = 'home_list'    
        template_name = 'blog/index.html'
        queryset = blog_post.objects.all().order_by("-timestamp")
    
        def get_context_data(self, **kwargs):
            context = super(IndexView, self).get_context_data(**kwargs)
            context['categories'] = Category.objects.all()
            # And so on for more models
            return context
    

    forms.py

    from django import forms
    
    
    
    from .models import Comment
    
    # class CommentForm(forms.Form):
    #   content_type = forms.CharField(widget=forms.HiddenInput)
    #   object_id = forms.IntegerField(widget=forms.HiddenInput)
    #   #parent_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
    #   content = forms.CharField(label='', widget=forms.Textarea)
    
    class CommentForm(forms.ModelForm):
        content = forms.CharField(widget=forms.Textarea, label='')  
        class Meta:
            model = Comment
            fields = ['content_type','object_id', 'content'] # list of fields you want from model
            widgets = {'content_type': forms.HiddenInput(),'object_id': forms.HiddenInput(), 
           }
    

    blog_post_detail.html

    {% extends "base.html" %}
    
    {% load crispy_forms_tags %}
    
    
    
    
    
    
    
    {% block content %}
    
    
                <!-- Blog Post Content Column -->
                <div class="col-lg-8">
    
                    <!-- Blog Post -->
    
                    <!-- Title -->
                    <h1>{{ object.title }}</h1>
    
                    <!-- Author -->
                    <p class="lead">
                        by <a href="#">Start Bootstrap</a>
                    </p>
    
                    <hr>
    
                    <!-- Date/Time -->
                    <p><span class="glyphicon glyphicon-time"></span> Posted on {{ object.timestamp|date }} </p>
    
                    <hr>
    
                    <!-- Preview Image -->
                    <!-- <img class="img-responsive" src="http://placehold.it/900x300" alt=""> -->
                            {% if object.image %}
                        <img src='{{ object.image.url }}' class='img-responsive' />
                            {% endif %}
                    <hr>
    
                    <!-- Post Content -->
                    <div class="content-markdown"><p class="lead">{{ object.blog_content }}</p></div>
    
                    <hr>
    
                    <!-- Blog Comments -->
    
    
    
    
    
                    <!-- Comments Form LEAVE A COMMENT -->
                    <div class="well">
                        <h4>Leave a Comment:</h4>
     <!--                    <form role="form">
                            <div class="form-group">
                                <textarea class="form-control" rows="3"></textarea>
                            </div>
                            <button type="submit" class="btn btn-primary">Submit</button>
                        </form> -->
                            <form method="POST" action='.' enctype='multipart/form-data'> {% csrf_token %}
                                {{ form }}
                            <input type='submit' value='Post comment' class='btn btn-default'>
                            </form>
                            <hr/>
    
                    </div>
    
                    <hr>
    
                    <!-- Posted Comments -->
                    <!-- Comment -->
                    {% for comment in comments %}
                    <div class="media">
                        <a class="pull-left" href="#">
    <!--                         {% if object.image %}
                        <img src='{{ object.image.url }}' class='img-responsive' />
                            {% endif %} -->
                             <img class="media-object" src="http://placehold.it/64x64" alt=""> 
                        </a>
                        <div class="media-body">
                            <h4 class="media-heading">{{ comment.content_object }} 
                                <small> by {{ comment.user }} | {{ comment.timestamp|timesince }} ago </small>
                            </h4>
                            {{ comment.content }}
                            <!-- Nested Comment -->
    <!--                         <div class="media">
                                <a class="pull-left" href="#">
                                    <img class="media-object" src="http://placehold.it/64x64" alt="">
                                </a>
                                <div class="media-body">
                                    <h4 class="media-heading">Nested Start Bootstrap
                                        <small>August 25, 2014 at 9:30 PM</small>
                                    </h4>
                                    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
                                </div>
                            </div> -->
                            <!-- End Nested Comment -->
                        </div>
                    </div>
                    {% endfor %}
                </div>
    
    
               <!-- Blog Sidebar Widgets Column -->
                <div class="col-md-4">
    
                    <!-- Blog Search Well -->
                    <div class="well">
                        <h4>Blog Search</h4>
                        <div class="input-group">
                            <input type="text" class="form-control">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">
                                    <span class="glyphicon glyphicon-search"></span>
                            </button>
                            </span>
                        </div>
                        <!-- /.input-group -->
                    </div>
    
                    <!-- Blog Categories Well -->
                    <div class="well">
                        <h4>Blog Categories</h4>
                        <div class="row">
                            <div class="col-lg-6">
                                <ul class="list-unstyled">
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                </ul>
                            </div>
                            <!-- /.col-lg-6 -->
                            <div class="col-lg-6">
                                <ul class="list-unstyled">
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                    <li><a href="#">Category Name</a>
                                    </li>
                                </ul>
                            </div>
                            <!-- /.col-lg-6 -->
                        </div>
                        <!-- /.row -->
                    </div>
    
                    <!-- Side Widget Well -->
                    <div class="well">
                        <h4>Side Widget Well</h4>
                        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore, perspiciatis adipisci accusamus laudantium odit aliquam repellat tempore quos aspernatur vero.</p>
                    </div>
    
                </div>
    
            </div>
            <!-- /.row -->
                {% endblock content %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-19
      • 2015-08-25
      • 2018-03-18
      • 2012-01-23
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多