##### Advanced Editing

NDR Core tries to let you do all your configuration in the browser without bugging you with technical details. However, there are a number of ways in which you can tweak and change your web site if you are willing to dive into the code. There is a technical documentation to which you should refer. This page gives you an overview over the general possibilities.

NDR Core is a Django module and thus written in python. HTML code is mixed with the django template markup which lets you build pages dynamically. A good understanding of HTML, bootstrap, CSS and basic understanding of django is necessary to make most of the changes.

###### Overwrite Templates

When you create a page, a HTML template is created and saved within your `ndr` django module. If you don't want to use the rich text editor, you can change the `content` block with your own HTML code and use the jQuery, bootstrap, fontawesome, ... functionalities as you need them.

There are multiple blocks you can overwrite. Besides `content`, there is `page_title`, `footer` and others, depending on the UI style. Refer to the technical documentation for more information.

###### Create Your Own UI Style

A UI Style consist mainly of a `base.html` template, some css and javascript. The template needs to display the main page structure and the navigation, footer and page header. It needs to provide a `content` block which is overwritten by the different pages. Context data is available to the template to provide the functionality and you can check for settings values if needed. The template needs to be placed within your `ndr` django module and extended by your own `base.html`. Refer to the technical documentation for more information.

###### Changing static content

In your `ndr` module you find a static folder with css, javascript and some images. You can change them.

###### Implement APIs

You can help extend NDR Core by providing your own API implementation. Basically you create two python classes (`Query` and `Result`), extend the respective base classes and implement the abstract methods. Refer to the technical documentation for more information.