Get all view templates with Python

Hi All,

I’m trying to get all the view template in my project with the following code

views = FilteredElementCollector(doc).OfClass(View).ToElements()

viewTemplates=[v for v in views if v.IsTemplate]

I get some nulls in place of the 3D view templates but I cannot clean inside the Python script.

image

viewTemplates[0]==None gives me false!

Strangely if i get the name of the templates I can get the name from the null! :slightly_smiling_face:

OUT= [v.Name for v in viewTemplates]

image

Any idea why this is happening?

May be like this:

templates = [v.Id for v in views if v.Name == None]

@Kulkul that gives me and empty list. Also why are you trying to get the Id instead? What are you trying to do?

image

Dynamo does not have an element wrapper for 3d view templates and those are instead directly converted to null

3 Likes

Hi @salvatoredragotta

As @Dimitar_Venkov said we can’t collect 3d view templates but you can remove nulls from your list this way:

Cheers!

4 Likes

@Kulkul I tested your solution but it just doesn’t get rid of 3D view templates but also section templates

@salvatoredragotta Drop here your rvt file and show us the list of your result.

@Kulkul I’m using the sample project rac_basic_sample_project.rvt

I’ve created 3 new section template (b1,b2,b3).

There are the results;

image

@salvatoredragotta is this what you need?

Capture

1 Like

@Kulkul Yes The list top left ! How did you filter?

I used logic inside python.

1 Like

Thanks! Got it :smile:

I was facing similar issue. This post has saved me. @Kulkul your life saver. Thanks a lot :slight_smile:

2 Likes

Can share the final script please?

A slight modification to the python code above using the instance function.

# Import libraries.
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import*

clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument


# Get view templates.
view_templates = [t for t in FilteredElementCollector(doc).OfClass
(View).ToElements() if t.IsTemplate and not isinstance(t, View3D)]


# Assign your output to the OUT variable.
OUT = view_templates
1 Like