2017-09-02 7 views
0

私のサイトには管理者がホームページのサイドバーに表示される新しいウィジェットを作成できる部分があります。私は、ユーザーがフォームにコードを入力して、テキストの代わりにテンプレート内でコードが有効なコードとして機能するようにしたいと考えています。私はこれについてスタックオーバーフローとGoogleの話を何も見つけることができません。これまでのところ、私はフォームとテンプレートの設定があり、ユーザーはウィジェットを追加することができますが、ページのレンダリングで表示されるウィジェットは、コードとして実行するのではなくテキストです。ここに私がこれまで行ってきたことがあり、それが何をしているのか、標準のテキストとして表示されているコードに基づいて私が何をしようとしているのかを見ることができると思います。Django:htmlテンプレートでモデルフィールド値を有効なテンプレートタグとして使用します。

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>は言うれるサイドバーに見ることができるように...

編集:は、ここ(上図)私はwidget_list_inner.htmlを注入する{% include %}を使用しています私のindex.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

サイドバーplsのコードを追加 –

+0

Adminpanel app widget_list_inner.htmlは、インスタンスのモデルをチェックするforループを使ってサイドバーを作成するhtmlです。私はあなたがそれを見たい場合は、私のindex.htmlに{%include%}タグを持っていますか? – Garrett

関連する問題