私のサイトには管理者がホームページのサイドバーに表示される新しいウィジェットを作成できる部分があります。私は、ユーザーがフォームにコードを入力して、テキストの代わりにテンプレート内でコードが有効なコードとして機能するようにしたいと考えています。私はこれについてスタックオーバーフローと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)
あなたは、私がそのコードが実際に実行さだけではなく、表示する{{ 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 %}
サイドバーテンプレートのコードを追加できますか? {{user.username}}がどこにあるか –
@KarimNGorjux Adminpanel app widget_list_inner.htmlは、インスタンスのモデルをチェックするforループでサイドバーを作成するhtmlです。私はあなたがそれを見たい場合は、私のindex.htmlに '{%include%}'タグを持っていますか? – Garrett