2017-09-02 27 views
0

我的网站上有一个部分,管理员用户可以在主页上的侧边栏中创建新的部件。我希望允许用户将代码输入到表单中,并使代码充当模板中的有效代码,而不仅仅是文本。我无法找到任何关于堆栈溢出和谷歌谈到这一点。到目前为止,我的表单和模板设置允许用户添加小部件,但它在页面中显示的是文本,而不是作为代码执行。以下是我到目前为止以及它在做什么,我认为您将能够根据正在显示的代码作为标准文本来看看我要做什么。Django:在模板中使用模型字段值作为有效的模板标签

Adminpanel应用models.py:

from django.db import models 

# Create your models here. 
class Widget(models.Model): 
    name = models.CharField(max_length=50) 
    widget_order = models.IntegerField(blank=False,unique=True) 
    body = models.TextField(max_length=500) 

    def __str__(self): 
     return self.name 

Adminpanel应用widget_list_inner.html模板:

{% for widget in widget_list %} 
    <div class="widget"> 
     <div class="widget-content"> 
      <p>{{ widget.body }}</p> 
     </div> 
    </div> 
{% endfor %} 

Adminpanel应用widget_form.html模板:

{% extends "base.html" %} 

{% block content %} 
    <div class="colorset-base"> 
     <h2>Create new widget</h2> 
     <form id="postForm" action="{% url 'adminpanel:create-widget' %}" method="POST"> 
      {% csrf_token %} 
      {{ form }} 
      <button type="submit" class="submit btn btn-primary btn-large">Add Widget</button> 
     </form> 
    </div> 
{% endblock %} 

不知道这是相关,但这里是我的Adminpanel应用程序views.py:

from django.shortcuts import render 
from adminpanel.forms import WidgetForm 
from adminpanel.models import Widget 
from django.utils import timezone 

from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse,reverse_lazy 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.mixins import LoginRequiredMixin 
from braces.views import SelectRelatedMixin 
from django.views.generic import (TemplateView,ListView, 
            DetailView,CreateView, 
            UpdateView,DeleteView) 

# Create your views here. 
class CreateWidgetView(LoginRequiredMixin,CreateView): 
    login_url = '/login/' 
    redirect_field_name = 'index.html' 
    form_class = WidgetForm 
    model = Widget 

    def form_valid(self,form): 
     self.object = form.save(commit=False) 
     self.object.save() 
     return super().form_valid(form) 

    def get_success_url(self): 
     return reverse('adminpanel:widgets') 

class SettingsListView(ListView): 
    model = Widget 
    ordering = ['widget_order'] 

class DeleteWidget(LoginRequiredMixin,SelectRelatedMixin,DeleteView): 
    model = Widget 
    select_related = ('Widget',) 
    success_url = reverse_lazy('adminpanel:widget') 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(user_id=self.request.user.id) 

    def delete(self,*args,**kwargs): 
     return super().delete(*args,**kwargs) 

这里是正在发生的事情: enter image description here

正如你在哪里是边栏看到说{{ user.username }} <p>{{ user.username }}</p>我想该代码实际执行,而不是仅仅显示...

编辑:这是我的index.html我在哪里使用{% include %}注入widget_list_inner.html(如上所示)

{% extends "base.html" %} 

{% block content %} 

<div class="container"> 
    <div class="sidebar"> 
     {% include "adminpanel/widget_list_inner.html" %} 
    </div> 

    <div class="content"> 
    {% for colorset in colorset_list %} 
      <div class="colorset-info"> 
       <h3 class="set-name">{{ colorset.name }}</h3> 
        <p class="author accent-text">Author: {{ colorset.user }}</p> 

        {% if user.is_authenticated and colorset.user == user %} 
         <a class="auth-user-options" href="{% url 'colorsets:delete' pk=colorset.pk %}">Delete</a> 
        {% endif %} 
      </div> 
      <table class="colorset"> 
       <tr> 
        <td class="color" style="background-color:#{{ colorset.color_one }}"> 
        </td> 
        <td class="color" style="background-color:#{{ colorset.color_two }}"> 
        </td> 
        <td class="color" style="background-color:#{{ colorset.color_three }}"> 
        </td> 
        <td class="color" style="background-color:#{{ colorset.color_four }}"> 
        </td> 
        <td class="color" style="background-color:#{{ colorset.color_five }}"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <p>#{{ colorset.color_one }}</p> 
        </td> 
        <td> 
         <p>#{{ colorset.color_two }}</p> 
        </td> 
        <td> 
         <p>#{{ colorset.color_three }}</p> 
        </td> 
        <td> 
         <p>#{{ colorset.color_four }}</p> 
        </td> 
        <td> 
         <p>#{{ colorset.color_five }}</p> 
        </td> 
       </tr> 
      </table> 
    {% endfor %} 
    </div> 
</div> 

{% endblock %} 
+0

你可以添加侧边栏模板的代码吗? {{user.username}}所在位置 –

+0

@KarimNGorjux Adminpanel app widget_list_inner.html是使用for循环检查模型的实例创建边栏的html。如果你想看到我的index.html,我有一个'{%include%}'标签? – Garrett

回答

0

使用{{request.user.username}},原因是?你必须具体说明你在问什么,所以你正在提出请求和请求的实际用户

+0

您的权利我没有这样做,但它仍然不显示代码的功能,只是代码本身作为文本。 – Garrett

+0

添加侧栏的代码 –

+0

Adminpanel应用程序widget_list_inner.html是用for循环来检查模型的实例创建边栏的html。如果你想看到我的index.html,我有一个{%include%}标签? – Garrett