标签: django-class-based-views

在FormView form_valid方法中更新上下文数据?

我有一个QuestionView派生自FormView班级的班级.这是一个代码片段来解释我的问题:

class QuestionView(FormView):
    ...
    context_var1 = y
    def form_valid (self, form):
    ...
    self.context_var1 = x
    ...
    def get_context_data(self, **kwargs):
    ...
    context['context_var1'] = self.context_var1
    ...
    return context
Run Code Online (Sandbox Code Playgroud)

如上所示,我更新了一组上下文变量form_valid,我打算在模板中使用这些变量的值 - 因此是context字典中的变量.这段代码的问题context_var1在于没有看到更改 - 可能是因为get_context_dataform_valid方法之前调用了.这有解决方法吗?

python django django-class-based-views

14
推荐指数
3
解决办法
2万
查看次数

如何使用基于类的视图动态设置模板名称?

我已经搜索了基于类的视图Django文档(Django 1.4)的参考和主题,但我还没有发现任何提及此问题.如何使用基于类的视图动态设置模板名称?我正在寻找以下设置的基于类的等价物:

urls.py

from django.conf.urls.defaults import *
from mysite.views import dynamic

urlspatterns = patterns('', 
    url(r'^dynamic/(?P<template>\w+)/$', dynamic),)
)
Run Code Online (Sandbox Code Playgroud)

views.py

from django.shortcuts import render_to_response

def dynamic(request, template):
    template_name = "%s.html" % template 
    return render_to_response(template_name, {})
Run Code Online (Sandbox Code Playgroud)

django django-class-based-views

14
推荐指数
1
解决办法
7593
查看次数

基于Django类的视图合成

我正在为项目使用Django 1.3的基于类的通用视图.他们真的很好,但我想成为DRYer.我有一个页面显示我们收到的新闻报道列表,另一个页面显示我们发布的文章列表.在概述页面上,我需要显示两个列表.我想创建一个复合视图,它接受两个视图并创建一个附加了两个查询集的上下文.

django view composite django-class-based-views

13
推荐指数
1
解决办法
2987
查看次数

如何在django中为DeleteView添加取消按钮

在Django中为"基于类"的通用视图添加"取消"按钮的最佳方法是什么?

在下面的示例中,我希望取消按钮将您带到success_url不删除对象.我试过<input type="submit" name="cancel" value="Cancel" />在模板上添加一个按钮.我可以通过覆盖类的post方法来检测是否按下了这个按钮AuthorDelete,但我无法弄清楚如何从那里重定向.

示例myapp/views.py:

from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

    def post(self, request, *args, **kwargs):
        if request.POST["cancel"]:
            return ### return what? Can I redirect from here?
        else:
            return super(AuthorDelete, self).post(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

示例myapp/author_confirm_delete.html:

<form action="" method="post">{% csrf_token %}
    <p>Are you sure you want to delete "{{ object }}"?</p>
    <input type="submit" value="Confirm" />
    <input type="submit" name="cancel" value="Cancel" /> …
Run Code Online (Sandbox Code Playgroud)

django django-class-based-views

13
推荐指数
3
解决办法
8947
查看次数

Django:访问forms.py clean函数中的请求

嗨Stackoverflow人,

在forms.py中的clean函数中,我想在会话变量中自动保存一些信息.但是,我似乎无法访问请求变量.

切换请求变量的所有示例都基于基于函数的视图,但在这里我使用的是基于类的视图.

我的forms.py:

from django import forms
from item.models import Item

class CreateItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ('name', 'description')

    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(CreateItemForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super(CreateItemForm, self).clean()
        if cleaned_data.get("address"):
            self.request.session['name'] = cleaned_data.get("name") 
        else:
            raise forms.ValidationError(_('Oops, can\'t find location.'))
        return self.cleaned_data
Run Code Online (Sandbox Code Playgroud)

我的views.py:

from django.views.generic.edit import FormView
from item.forms import CreateItemForm

class ItemCreate(FormView):
    form_class = CreateItemForm 
    template_name = 'item/item_create.html' 
    success_url = 'http://www.google.com'
Run Code Online (Sandbox Code Playgroud)

request将views.py中的变量移交给forms.py 的最佳方法是什么?

谢谢您的回答.

django request django-forms django-class-based-views

12
推荐指数
1
解决办法
6043
查看次数

在网址中没有pk的Django UpdateView

是否有可能pk从与网址相关的消除UpdateView

例如,如果我有

url(r'^myobj/update/(?P<pk>\d+)/$', views.UpdateMyObj.as_view(), name="update")
Run Code Online (Sandbox Code Playgroud)

有什么方法可以写它

url(r'^myobj/update/$', views.UpdateMyObj.as_view(), name="update")
Run Code Online (Sandbox Code Playgroud)

然后pk作为参数发送POSTGET请求?

django django-urls django-views django-class-based-views

12
推荐指数
1
解决办法
1万
查看次数

为所有视图提供额外的上下文

我正在使用django为我的团队组建一个项目管理网站.我的基本模板包括一个侧边栏菜单,其中包含所有项目和用户的列表DetailView,分别链接到该用户或项目的a .

我的问题是我需要为每个视图提供UserProject模型,以便我可以渲染该侧边栏.我知道如何添加额外的上下文 ; 问题是我觉得我通过修改每个级别的上下文来违反DRY.是否有可能重新定义简单的底座TemplateClass,使所有儿童类- ListView,DetailView等,含有改性方面?

在相关的说明中,如果这是设置项目的可怕方式,请告诉我.

django django-views django-class-based-views

12
推荐指数
1
解决办法
2741
查看次数

将Pk或Slug传递给Django中的Generic DetailView?

我是Django Class视图的新手.我正在尝试制作一个简单的视图来获取帖子的详细信息.我的views.py:

from django.views.generic import ListView, View, DetailView 
class GenreDetail(DetailView):
            model = Post
            template_name = "post.html"
Run Code Online (Sandbox Code Playgroud)

我的urls.py:

urlpatterns = [
        url(r'(?P<post_id>[^/]+)', GenreDetail.as_view(), name = 'post'),
        url(r'(?P<post_id>[^/]+)/(?P<slug>[-\w]+)$', GenreDetail.as_view()),
    ] 
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

AttributeError at /2/memoirs-of-a-geisha-by-arthur-golden
Generic detail view GenreDetail must be called with either an object pk or a slug.
Run Code Online (Sandbox Code Playgroud)

因此pk或slug不会传递给Generic Detailview.我怎么通过?我假设从url它可以接收,但事实并非如此.

python django django-class-based-views

12
推荐指数
2
解决办法
2万
查看次数

使用 Django 登录需要 Mixin

我有一个基于类的视图,我希望只有在用户登录时才能访问它,并且我希望将未经身份验证的用户重定向回索引页面

这是有问题的观点:

class ArtWorkCreate(CreateView, LoginRequiredMixin):
    login_url = '/login/'
    redirect_field_name = 'login'
    model = ArtWork
    fields = ['userID','title','medium','status','price','description']
Run Code Online (Sandbox Code Playgroud)

这是相关的模型

class ArtWork(models.Model):
    userID= models.ForeignKey(MyUser, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    medium = models.CharField(max_length=50)
    price = models.FloatField()
    description = models.TextField(max_length=1000)
    status = models.CharField(max_length=4, default="SALE")

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

这是相关的网址

 url(r'artwork/add/$', ArtWorkCreate.as_view(), name='artwork-add'),
Run Code Online (Sandbox Code Playgroud)

这是我想重定向到用户未登录的 URL id

  url(r'^index/$', views.index, name='index'),
Run Code Online (Sandbox Code Playgroud)

我的目标是使表单只能访问登录用户,他们只能在他们自己的名字下添加艺术品项目

最后这是模型形式

class ArtWorkForm(ModelForm):
    class Meta:
        model = ArtWork
        fields = ['title','medium','status','price','description']
Run Code Online (Sandbox Code Playgroud)

django django-class-based-views

12
推荐指数
2
解决办法
1万
查看次数

在基于Django类的视图中检查视图方法参数名称

我在我的Django项目中创建了一个装饰器,用于将参数值注入到装饰方法的参数中.

我这样做是inspect.getargspec为了检查方法中存在哪些参数并将它们放入kwargs.否则,由于方法中的参数数量不正确,我会收到错误.

虽然这在单个视图方法中正常工作,但在Django基于类的视图方面却失败了.

我相信这可能是因为装饰器@method_decorator在类级别应用于dispatch方法而不是个人getpost方法.

我是一个蟒蛇新手,可能会忽略一些明显的东西.

有没有更好的方法来做我正在做的事情?是否可以在基于类的视图中获取方法参数名称?

我正在使用Python 2.7和Django 1.11

装饰者

def need_jwt_verification(decorated_function):
    @wraps(decorated_function)
    def decorator(*args, **kwargs):
        request = args[0]
        if not isinstance(request, HttpRequest):
            raise RuntimeError(
                "This decorator can only work with django view methods accepting a HTTPRequest as the first parameter")

        if AUTHORIZATION_HEADER_NAME not in request.META:
            return HttpResponse("Missing authentication header", status=401)

        jwt_token = request.META[AUTHORIZATION_HEADER_NAME].replace(BEARER_METHOD_TEXT, "")

        try:
            decoded_payload = jwt_service.verify_token(jwt_token)

            parameter_names = inspect.getargspec(decorated_function).args

            if "phone_number" in parameter_names or "phone_number" …
Run Code Online (Sandbox Code Playgroud)

python django django-class-based-views class-based-views

11
推荐指数
2
解决办法
955
查看次数