flask - probleme with @action decorator und view

Django, Flask, Bottle, WSGI, CGI…
Antworten
mvmthecreator
User
Beiträge: 10
Registriert: Montag 22. Dezember 2014, 19:23

hallo liebe python community,

ich benutze flask-admin und möchte eine vom list template eine function aufrufen. zur veranschaulichung habe ich ein bild mit hochgeladen. wenn ich auf den 'create site'-link klicke möchte ich eine function aufrufen. ich kann jedoch in meinem view nicht auf die variablen von meinem model zugreifen. wie stelle ich dies an. ich bin dankbar für jeden lösungs ansatz.

Bild

meine code sieht so aus:

# app.py

Code: Alles auswählen

import datetime

from flask import Flask, flash

import flask_admin as admin
from flask_mongoengine import MongoEngine
from flask_admin import expose, BaseView
from flask_admin.contrib.mongoengine import ModelView
from flask_admin.actions import action

# Create application
app = Flask(__name__)

# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
app.config['MONGODB_SETTINGS'] = {'DB': 'test_app'}

# Create models
db = MongoEngine()
db.init_app(app)


class Website(db.Document):
    domain_name = db.StringField(max_length=200)
    title = db.StringField(max_length=160)
    meta_desc = db.StringField()


class WebsiteView(ModelView):

    list_template = 'custom_list.html'


    @action('create_meta', 'Create Meta', 'Are you sure you want to create meta data?')
    def action_createmeta(self, ids):
        return (Website.domain_name, Website.title)



# Flask views
@app.route('/')
def index():
    return '<a href="/admin/">Click me to get to Admin!</a>'


if __name__ == '__main__':
    # Create admin
    admin = admin.Admin(app, 'Example: MongoEngine')

    # Add views
    admin.add_view(WebsiteView(Website))

    # Start app
    app.run(debug=True)

# templates/custom_list.html

Code: Alles auswählen

{% extends 'admin/model/list.html' %} 
{% block body %} 
    <h1>Custom List View</h1> 
    {{ super() }} 
{% endblock %}

{% block list_row_actions %} 
    {{ super() }} 
   
  <form class="icon" method="POST" action="/admin/website/action/">
    <input id="action" name="action" value="create_meta" type="hidden">
    <input name="rowid" value="{{ get_pk_value(row) }}" type="hidden">
    <button onclick="return confirm('Are you sure you want to create meta data?');" title="Create Meta">
      <span class="fa fa-ok icon-ok"></span>
    </button>
  </form>
{% endblock %}
Antworten