使用Django模板标签的Mako模板(Mako templates using Django template tags)
我们的Django站点使用Mako模板构建。 我们想使用名为django-socialregistration的第三方项目,但其模板标签使用Django的模板。 如果我们使用Django模板,我们可以
{% load facebook_tags %} {% facebook_button %} {% facebook_js %}
我怎样才能在Mako做同样的事情? 你可以在Mako中将python内联,但我还没有想出如何这样做。
最终修复
<%! from django.template import Template, Context %> <% tpl = "{% load facebook_tags %}{% facebook_button %}{% facebook_js %}" %> ${Template(tpl).render(Context(dict_=dict(request=request)))}
Our Django site is built using Mako templates. We want to use a third party project called django-socialregistration, but its template tags use Django's templates. If we used Django templates we could just
{% load facebook_tags %} {% facebook_button %} {% facebook_js %}
How can I do the same thing in Mako? You can inline strait up python in Mako, but I haven't figured out how to do it that way either.
Final Fix
<%! from django.template import Template, Context %> <% tpl = "{% load facebook_tags %}{% facebook_button %}{% facebook_js %}" %> ${Template(tpl).render(Context(dict_=dict(request=request)))}
原文:https://stackoverflow.com/questions/3790854
最满意答案
我想你将使用Django的默认用户模型作为OneToOneField与您的自定义用户模型。 用户模型不需要其他序列化程序。 由于额外的字段将在CustomUser中,因此仅为自定义用户编写序列化程序就足够了。
from django.contrib.auth.models import User class CustomUser(models.Model): user = models.OneToOneField(User) # Add your extra fields here.
这是你如何做到的:
CustomUserSerializer(serializers.ModelSerializer): username = Serializers.CharField(source='user.username') email = Serializers.EmailField(source='user.email') class Meta: model = CustomUser fields = ('username', 'email', 'extra_fields_from_CustomUser',)
值得庆幸的是,
source
允许您轻松访问OneToOneField,以便您不需要任何其他内容。I guess you're going to use Django's default User model as an OneToOneField with your custom User Model. You don't need another serializer for User model. Since extra fields will be in CustomUser, it's enough to write a serializer for only Custom User.
from django.contrib.auth.models import User class CustomUser(models.Model): user = models.OneToOneField(User) # Add your extra fields here.
This is how you do it:
CustomUserSerializer(serializers.ModelSerializer): username = Serializers.CharField(source='user.username') email = Serializers.EmailField(source='user.email') class Meta: model = CustomUser fields = ('username', 'email', 'extra_fields_from_CustomUser',)
Thankfully,
source
lets you to reach your OneToOneField easily so that you don't need anything else.
相关问答
更多-
我认为这是一个意见,在哪里调用Web服务。 我会说不要污染你的模型,因为这意味着你可能需要这些模型的实例来调用这些Web服务。 这可能没有任何意义。 你的另一种选择是在模型上制作@classmethod ,这不是我会争辩的非常干净的设计。 如果访问视图本身触发Web服务调用,则从视图调用可能更自然。 是吗? 你说你需要保持同步,这意味着可能需要后台处理。 此时,如果您的后台进程发出http请求,您仍然可以使用视图,但这通常不是最好的设计。 如果有的话,你可能会希望自己的REST API用于此,这就需要将代码 ...
-
您可以自定义它,并且它不会太奇怪,因为这是一个APIView (与人类期望GET返回单个模型的APIView相反),例如,您可以从不同模型中返回多个对象你的GET响应 def get(self, request, format=None, **kwargs): cart = get_cart(request) cart_serializer = CartSerializer(cart) another_serializer = AnotherSerializer(another_ob ...
-
我想你将使用Django的默认用户模型作为OneToOneField与您的自定义用户模型。 用户模型不需要其他序列化程序。 由于额外的字段将在CustomUser中,因此仅为自定义用户编写序列化程序就足够了。 from django.contrib.auth.models import User class CustomUser(models.Model): user = models.OneToOneField(User) # Add your extra fields here. 这是 ...
-
在django rest框架中返回两个不同模型中包含的数据(Return data contained in two different models in django rest framework)[2024-02-28]
首先在Django rest框架中,您必须在模型中使用相关名称。 将模型重写为: models.py class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True, related_name = 'user_profile') serializer.py class ProfileUserCombinedSerializer(serializers.M ... -
class MSTSerializer(serializers.HyperlinkedModelSerializer): jobdtl_id = DTLSerializer() class Meta: model = Jobmst fields = ('id', 'url', 'jobdtl_id'...) class DTLSerializer(serializers.HyperlinkedModelSerializer): class Meta: ...
-
幸运的是,DRF允许通过设置一些参数来灵活地支持这种情况。 首先,我在路由器条目上设置basename参数: router.register(r'foo2', views.Foo2ViewSet, 'foo2') 接下来,我在HyperlinkedModelSerializers中设置view_name ,以便不默认为文档中提到的 foo-detail : class FooSerializer1(serializers.HyperlinkedModelSerializer): url = ser ...
-
在django rest框架的一个序列化器中创建两个模型(creating two models in one serializer of django rest framework)[2021-09-09]
在RegistrationSerializer.create()方法中,您将返回一个User对象。 序列化程序将尝试将该对象序列化为此表示形式: { 'userserializer': x, 'emailcontactserializer': y } 但它抱怨,因为您返回的用户没有userserializer字段。 如果你真的想从这个API调用中返回一个用户,你可以使用Meta.model = User将RegistrationSerializer作为ModelSerializer,并覆盖perf ... -
在序列化程序字段中,您可以使用source参数指定模型上的字段。 如果您尝试从客户端模型访问反向关系,则应使用MODELNAME_set字段作为源。 Django将此字段添加到ForeignKey的另一端。 即 assignment = PrimaryKeyRelatedField( source='clientassignment_set', many=True, read_only=True, ) 请注意,使用read_only=True您也不需要指定查询集。 您的另一个选择是 ...
-
可写的嵌套表示部分可能对您有所帮助。 你有2个型号ModelA和ModelB 。 创建您的第一个模型的序列化程序 class ModelASerializer(serializers.ModelSerializer): class Meta: model = ModelA fields = ('fields',..) # 然后在其他模型的序列化程序中添加第一个序列化程序并覆盖所需的方法(如create , update )。 像这样的东西: class Model ...
-
有一些方法可以在序列化程序中创建和更新实例 来自下面的drf官方文档 如果我们希望能够根据验证的数据返回完整的对象实例,那么我们需要实现.create()和update()方法中的一个或两个。 例如: class CommentSerializer(serializers.Serializer): email = serializers.EmailField() content = serializers.CharField(max_length=200) created = ser ...