问题描述
我真的很想在我的自定义模板中重复使用用Wagtail制作的网站管理部分中使用的相同小部件。有一个简单的方法吗?
例如:Picture of a field in wagtail's admin
在我的html模板中使用时将如下所示:Same field but in my view
我的模型当前看起来像这样:
import java.awt.Basicstroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Ripples implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokelater(new Ripples());
}
private Animation animation;
private DrawingPanel drawingPanel;
private RipplesModel model;
public Ripples() {
model = new RipplesModel();
}
@Override
public void run() {
JFrame frame = new JFrame("Ripples");
frame.setDefaultCloSEOperation(JFrame.DO_nothing_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
stopAnimation();
frame.dispose();
System.exit(0);
}
});
drawingPanel = new DrawingPanel(model);
frame.add(drawingPanel,BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
animation = new Animation(this,model);
new Thread(animation).start();
}
public void repaint() {
drawingPanel.repaint();
}
private void stopAnimation() {
if (animation != null) {
animation.setRunning(false);
}
}
public class DrawingPanel extends JPanel {
private static final long serialVersionUID = 1L;
private RipplesModel model;
public DrawingPanel(RipplesModel model) {
this.model = model;
setBackground(Color.WHITE);
setPreferredSize(new Dimension(500,500));
addMouseListener(new RipplesListener(model));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setstroke(new Basicstroke(3f));
List<Circle> circles = model.getCircles();
for (Circle circle : circles) {
Point p = circle.getCenter();
int radius = circle.geTradius();
g2.setColor(circle.getColor());
g2.drawoval(p.x - radius,p.y - radius,2 * radius,2 * radius);
}
}
}
public class RipplesListener extends MouseAdapter {
private RipplesModel model;
public RipplesListener(RipplesModel model) {
this.model = model;
}
@Override
public void mousepressed(MouseEvent event) {
model.addCircle(new Circle(event.getPoint(),createColor()));
}
private Color createColor() {
Random random = new Random();
int r = random.nextInt(255);
int g = random.nextInt(255);
int b = random.nextInt(255);
return new Color(r,g,b);
}
}
public class Animation implements Runnable {
private volatile boolean running;
private Ripples frame;
private RipplesModel model;
public Animation(Ripples frame,RipplesModel model) {
this.frame = frame;
this.model = model;
this.running = true;
}
@Override
public void run() {
while (running) {
sleep(20L);
incremenTradius();
}
}
private void incremenTradius() {
List<Circle> circles = model.getCircles();
for (Circle circle : circles) {
circle.incremenTradius();
}
repaint();
}
private void sleep(long delay) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printstacktrace();
}
}
private void repaint() {
SwingUtilities.invokelater(new Runnable() {
@Override
public void run() {
frame.repaint();
}
});
}
public synchronized void setRunning(boolean running) {
this.running = running;
}
}
public class RipplesModel {
private List<Circle> circles;
public RipplesModel() {
this.circles = new ArrayList<>();
}
public void addCircle(Circle circle) {
this.circles.add(circle);
}
public List<Circle> getCircles() {
return circles;
}
}
public class Circle {
private int radius;
private final Color color;
private final Point center;
public Circle(Point center,Color color) {
this.center = center;
this.color = color;
this.radius = 10;
}
public void incremenTradius() {
radius = (++radius > 200) ? 10 : radius;
}
public Color getColor() {
return color;
}
public int geTradius() {
return radius;
}
public Point getCenter() {
return center;
}
}
}
我的表格是这样的:
@slugify_field('name')
class Company(models.Model):
# more CharFields that I erased for brevity
address = models.CharField(
blank=True,max_length=255,help_text="The company's address.",)
founded = models.DateField(
blank=True,null=True,help_text='The foundation year.',)
short_description = models.TextField(
blank=True,help_text='A short description for the search view.',)
description = RichTextField(
blank=True,help_text='A complete description for the company view.',features=['h4','bold','ul','link']
)
website = models.TextField(
blank=True,help_text="The company main website",)
panels = [
FieldPanel('status'),FieldPanel('owner'),FieldPanel('name'),MapFieldPanel('address'),FieldPanel('founded'),FieldPanel('employees_count'),FieldPanel('contact',widget=autocomplete.ModelSelect2(url='contact-autocomplete')),FieldPanel('short_description'),FieldPanel('description'),FieldPanel('website'),FieldPanel('tags',widget=autocomplete.ModelSelect2Multiple(url='unseekable-tag-autocomplete')),FieldPanel('seeking',widget=autocomplete.ModelSelect2Multiple(url='seekable-tag-autocomplete')),FieldPanel('offering',]
def __str__(self):
return self.name
class Meta:
verbose_name = 'Company'
verbose_name_plural = 'Companies'
由于每个用户都可以修改自己的公司,所以我做了一个很好的视图,使他们可以编辑自己的信息,唯一的问题是,这些字段看上去与网站的管理员部分(由wagtail自动创建)不同。我可以将fieldPanels用作我的“表单”页面的小部件吗?
非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)